posts - 43,comments - 3,trackbacks - 0
 1//以步长为4求字符串长度
 2//由于此程序段涉及到了对地址的解引用,所以必须确保包含'\0'的四字节内存属性标记至少包含可读
 3size_t strlen(const char *str)  
 4{  
 5    unsigned v;  
 6    const char *= str;  
 7    while(*&& ((unsigned)p & 3))  
 8        p ++;  
 9    if (*== 0)  
10        return (size_t)(p - str);  
11    //每次递增4,直到找到包含'\0'的那四个字节
12    for (v = 0!v; p += 4)  
13    {  
14        v = (*(unsigned*)p - 0x01010101& 0x80808080;  
15        if (v)  
16            v &= ~*(unsigned*)p;  
17    }
  
18    //计算包含'\0'的那个四个字节中'\0'前有几个字符
19    for (; (v & 0xff== 0; p ++)  
20        v >>= 8;  
21    return (size_t)(p - str - 4); //    去除掉最后一个'p+=4'
22}
 
23
posted on 2011-03-14 00:07 RUI 阅读(279) 评论(0)  编辑 收藏 引用 所属分类: algorithm

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理