StrLenEx为测试字符串长度,但为何要*ptr & 0x80 呢??  (见详情)

jialiang123 2004-04-16 10:03:28
StrLenEx为测试字符串长度,但为何要*ptr & 0x80 呢??


short StrLenEx( char *str )
{
char *ptr;
short slength = 0;

for( ptr = str; *ptr != '\0'; )
{
if( *ptr & 0x80 )
ptr += 2;
else
ptr ++;

slength++;
}

return slength;
}


StrLenEx为测试字符串长度,但为何要*ptr & 0x80 呢??
...全文
367 8 打赏 收藏 举报
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
EternalBlue 2004-04-20
*ptr就是你所指的字符,用它跟0x80进行&运算,如果*ptr最高位为1就返回true,否则false。
  • 打赏
  • 举报
回复
tuxw 2004-04-20
*ptr & 0x80
如果表达式为真,说明 *ptr 高位为 1, 则是双字节字符
  • 打赏
  • 举报
回复
jialiang123 2004-04-20
能不能详细讲解字库呢??
  • 打赏
  • 举报
回复
superAfx 2004-04-19
80对应的二进制代码为1000 0000,最高位为一,代表汉字.汉字编码格式通称为10格式.
一个汉字占2字节,但只代表一个字符
  • 打赏
  • 举报
回复
tuxw 2004-04-19
为了识别双字节的字符,比如汉字或日文韩文等都是占两字节的, 每字节高位为1, 而一般西文字符只有一个字节,七位有效编码,高位为0

这个函数返回的是字符串的字符数,对双字节的字符只算一次

if( *ptr & 0x80 ) // 双字节字符 ?
ptr += 2; // 指针后移二位
else
ptr ++; // 指针后移一位



"abcdefgh" 字节数=8 字符数=8
"中cdefgh" 字节数=8 字符数=7
  • 打赏
  • 举报
回复
webnumen 2004-04-19
有一点不明白
*ptr & 0x80 得出一个什么值呢???
  • 打赏
  • 举报
回复
jialiang123 2004-04-19
up
  • 打赏
  • 举报
回复
rolix8311 2004-04-19
又学了一招!!!
  • 打赏
  • 举报
回复
相关推荐
发帖
C语言
加入

6.6w+

社区成员

C语言相关问题讨论
申请成为版主
帖子事件
创建了帖子
2004-04-16 10:03
社区公告
暂无公告