在c中处理utf
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 已经不用了 */
i++; //跳过
相关文档:
系统环境:Ubuntu 9.04
软件环境:NetBeans 6.7.1 C/C++ 、JDK1.6.0_16
本次目的:完成NetBeans 6.7.1 C/C++ 的配置工作、编译测试及对中文支持
首先从官网上下载最新版的Netbeans 选择C/C++工作台下载[点击进入],弹出的新网页将会自动下载,如下图:
在进行安装之前,我们先安装JDK, ......
一、一个经过编译的C/C++的程序占用的内存分成以下几个部分:
1、栈区(stack):由编译器自动分配和释放 ,存放函数的参数值、局部变量的值等,甚至函数的调用过程都是用栈来完成。其操作方式类似于数据结构中的栈。
2、堆区(heap) :一般由程序员手动申请以及释放, 若程序员不释放,程序结束时可能由OS回收 ......
(本文源自http://www.weste.net/2006/2-20/13432127659.html )
许多面试题看似简单,却需要深厚的基本功才能给出完美的解答。企业要求面试者写一个最简单的strcpy函数都可看出面试者在技术上究竟达到了怎样的程度,我们能真正写好一个strcpy函数吗?我们都觉得自己能,可是我们写出的strcpy很可能只能拿到10分中 ......
转帖http://www.cppblog.com/bidepan2023/archive/2008/01/22/41632.html
CSocket派生于CAsyncSocket, 所有施诸于上的操作皆为同步操作。比如Connnect,Receive等。
同步操作的优点是简单易用,但缺点也显而易见,效率低下,因为你必须等到一个操作完成之后才能进行下一个操作。
如果你很关心效率,就应该优先使用CAsyncS ......