在c中处理utf 8
UTF-8最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。
UTF-8的编码规则很简单,只有二条:
1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。
2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。
看代码
size_t utf_length(u_char *p, size_t n) // u_char*p 指向一个可能包含utf-8的字符串,n = strlen(p)
{
u_char c;
size_t len;
u_int32_t i;
for (len = 0, i = 0; i < n; len++, i++) {
c = p[i];
if (c < 0x80) { // 0x80 的2进制度(10000000),单字节的时候,最大的编码是(01111111), 也就是127,也就是ascii
continue;
}
if (c >= 0xc0) { //根据utf-8的第2条规则, 如果是2个字节编码成一个符号的时候,那么应该是(110*****,10******)
/*如果是3个字节编码成一个符号, 那么应该是(1110****,10******,10******)
如果是4个字节编码成一个符号, 那么应该是(11110***,10******, 10******,10******)
for (c <<= 1; c & 0x80; c <<= 1) {
/*for的用法,第一个代表赋初始值, 第2个判断, 第3个赋值, 第2次循环的时候,第一个c<<1 已经不用了 */
&nbs
相关文档:
Boss说,要看OpenGL,看了快一个月,总算出了个像样的东西,用C写了个3D迷宫,
虽然只有350行
代码,不过边学边写,足足写了一周时间,还是小有成就感的,活活活!
&n ......
这两天有很多朋友已经买了书了,并且开始看,呵呵,我心里也很高兴。
嗯,要说江湖上藏龙卧虎呢,这不,这才几天时间,已经有朋友指出我书中的一处明显错误,这里我正式给大家说明一下,免得对各位读者有个不好的误导。
问题出在第26页的一个图以及其相关文字。这是第二章基础知识的第一节,其实就是关于内存的讲解,大家 ......
五、文件定位
和C的文件操作方式不同的是,C++ I/O系统管理两个与一个文件相联系的指针。一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。每次执行输入或输出时,相应的指针自动变化。所以,C++的文件定位分为读位置和写位置的定位,对应的成员函数是 seekg()和 seekp(),seekg()是 ......
UVa Online Judge - Volume C 题目和解答索引。前面为原题链接,后面为我的解答链接。
返回总目录
10003 - Cutting Sticks
Dynamic Programming
Solution
10004 - Bicoloring
Graph: BFS
Solution
10006 - Carmichael Numbers
Number Theory: Modulus
Solution
10010 - Where's Waldorf?
String
Solution ......
3: int main()
4: {
5: int i = 1,j;
6: union test{
7: int m;
8: ......