欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 综合教程 >内容正文

综合教程

UTF-8&Unicode,0xC0和0x80是什么?

发布时间:2024/8/26 综合教程 52 生活家
生活随笔 收集整理的这篇文章主要介绍了 UTF-8&Unicode,0xC0和0x80是什么? 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

转载:http://blog.sina.com.cn/s/blog_7c4f3b160101dv4p.html

一个字符串长度统计的代码,如下

 
int calcLen(const char* _str)
{
        int n = 0;
        char ch = 0;
        while ((ch = *_str))
        {
            CC_BREAK_IF(! ch);
            if (0x80 != (0xC0 & ch))
            {
                ++n;
            }
            ++_str;
        }
        return n;   
}    


其中关于0x80!= (0xC0& ch)的判断, 百思不得其解,按照ansi表的标准解释来看, 0~127位足以表达对字符数目的统计,也就是说用如下代码
(0x80 & ch) == 0足以判断这个ch是不是一个字符, 因此那种复杂的写法理论上不只是做ansi字符的判断。

0xC0也就是1100, 这个&运算判断的是下一个ch的头两位是什么字符, 因为11能完全反映出本来的数字
对于普通的ansi字符(非扩展集)而言, 他的头一位一定是0(0000 0000 ~ 0111 1111)
对于UTF-8字符而言, 因为UTF-8编码是一种多字节序的形式, 他采用如下的数字序规律

所有10打头的在UTF-8里面, 表示都是一个多字节序的子序

两个UTF-8字符, 打头则是以110开始, 后面跟10XXXXXX, 10YYYYYY表示接下来的字符
三个则是1110开始, 后面跟三个10XXXXXX来表示字符

所以在计算字符串个数的时候, 只需要判断当前字符是不是等于10开头,不等于10开头就一定是一个单字符或者一个多字符, 然后计数器+1即可

具体有兴趣的童鞋可参阅http://stackoverflow.com/questions/3911536/utf-8-unicode-whats-with-0xc0-and-0x80

总结

以上是生活随笔为你收集整理的UTF-8&Unicode,0xC0和0x80是什么?的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。