易截截图软件、单文件、免安装、纯绿色、仅160KB

在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++; //跳过


相关文档:

C/C++试题

1、bool、float、指针变量与"零值"比较的if语句?
答:
bool flag;   if(flag),if(!flag)
char *p;   if(p==NULL),if(p!=NULL)
float x;  
const float EPSILON = 1e-6;
if((x>=-EPSILON)&&(x<=EPSILON)) //(-0.000001~0.000001)
if((x<-EPSILON)&& ......

c/c++程序的内存分配 [转]

题记:
所有的完美,都是在崩溃的一刻达到的!
我一直回避程序的内存管理,因为爱之愈深,恨之愈烈。但是,还是由很多的朋友一直在体这方面的问题,所以就索性把它坦白了,也许对你我都是一件好事情。
首先,需要搞清楚:变量的类型和它的存储类别是两个概念。
数据类型和内存管理没有直接的关系。
一个由c/C++编 ......

解读复杂的C/C++声明[实战篇]

这是入门篇中提到的那两题:
int * (* (*fp1) (int) ) [10];
int *( *( *arr[5])())();
解答如下
1.int * (* (*fp1) (int) ) [10];
从外往内进行分析
a.typedef P=(* (*fp1) (int) ),那么原声明改写为 int*P[10],这是一个有10个元素的数组,每个元素都是一个指向整型数的指针
b.typedef Q=(*fp1),那么P改写为 *Q( ......

嵌入式C/C++面试题汇总解答(II)

 (本文源自http://www.weste.net/2006/2-20/13432127659.html )  
许多面试题看似简单,却需要深厚的基本功才能给出完美的解答。企业要求面试者写一个最简单的strcpy函数都可看出面试者在技术上究竟达到了怎样的程度,我们能真正写好一个strcpy函数吗?我们都觉得自己能,可是我们写出的strcpy很可能只能拿到10分中 ......

c实现的求两个数的乘法逆元

定义:设a对b的乘法逆元是x则可以记为a*x=1 mod b,即a和x的积除以b的余数是1;
 
乘法逆元常用算法是欧几里德算法:
 
//算法求d关于模f的乘法逆元d-1 ,即 d* d-1 mod f = 1
 
  1 。(X1,X2,X3) := (1,0,f); (Y1,Y2,Y3) := (0,1,d)
  2。 if (Y3=0) then return d-1 = null //无逆元 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号