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 呢??
...全文
763 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
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
  • 打赏
  • 举报
回复
又学了一招!!!
【超级棒的算法改进】融合鱼鹰和柯西变异的麻雀优化算法研究(Matlab代码实现)内容概要:本文介绍了一种融合鱼鹰优化算法(BKA)和柯西变异策略的改进型麻雀搜索算法(SSA),旨在提升传统麻雀算法在全局搜索能力、收敛速度和避免陷入局部最优方面的性能。通过引入鱼鹰算法的捕食行为机制增强种群多样性,并结合柯西变异提高算法跳出局部极值的能力,从而构建出一种更为高效的混合优化算法OCSSA。该算法被成功应用于多个工程优化场景,如神经网络参数优化、微电网多目标调度、储能系统选址定容以及轴承故障诊断等领域,实验结果表明其在寻优精度和稳定性方面均优于多种经典和先进优化算法。此外,文中还配套提供了完整的Matlab代码实现,便于读者复现与扩展应用。; 适合人群:具备一定编程基础和优化算法背景,从事智能优化、机器学习、电力系统、信号处理等相关领域研究的研究生、科研人员及工程技术人员;熟悉Matlab语言并希望将智能算法应用于实际问题求解的开发者。; 使用场景及目标:①解决复杂非线性优化问题,如函数优化、参数调优、多目标调度等;②提升现有智能算法的搜索效率与鲁棒性,特别是在高维、多峰、约束优化问题中;③应用于神经网络训练、故障诊断、能源系统优化等实际工程项目中,实现更高精度的建模与预测。; 阅读建议:建议读者结合提供的Mat

70,034

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧