printf("%02x")乱码.printf("%x")正常

AIGPTchina 2012-09-29 03:38:37
memset(buf,0,sizeof(buf));
va_start(arg, pszFmt);
vsnprintf(buf, sizeof(buf), pszFmt, arg);
类似于printf的函数。代码在上面。
...全文
365 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
mujiok2003 2012-09-29
  • 打赏
  • 举报
回复
参数说明:
%x或%X期待unsigned int,无符号延展。所以
unsigned char c = 0x80; 
unsigned int b = c; //0x00 00 00 00 80


[Quote=引用 8 楼 的回复:]
你要注意, 0xX使用是要注意有符号,无符号问题.

最好是强制转换成无符号数.

printf("\r\n12222SWB=%02x\r\n",(BYTE)helll); //BYTE 是 unsigned char 为什么要转换成无符号数呢,有符号数就不能用%02x?

%x都会扩展为int类型,0x80的符号位为1,所以做符号扩展的时候,无符号数前面填充0为00000080,有符……
[/Quote]
AIGPTchina 2012-09-29
  • 打赏
  • 举报
回复
你要注意, 0xX使用是要注意有符号,无符号问题.

最好是强制转换成无符号数.

printf("\r\n12222SWB=%02x\r\n",(BYTE)helll); //BYTE 是 unsigned char 为什么要转换成无符号数呢,有符号数就不能用%02x?

%x都会扩展为int类型,0x80的符号位为1,所以做符号扩展的时候,无符号数前面填充0为00000080,有符号数前面填充1为ffffff80。是不是这样的原因呢?
AIGPTchina 2012-09-29
  • 打赏
  • 举报
回复

Print("\r\nhelloSWA=%02x\r\n",SWA);//正确
Print("\r\nhello.SWB=%x\r\n",SWB); //正确
Print("\r\nhello.SWC=%02X\r\n",SWA);//错误-乱码显示
Print("\r\nhello.SWC=%02x\r\n",SWB);//错误-乱码显示
AIGPTchina 2012-09-29
  • 打赏
  • 举报
回复
arm-linux-uclibc-gcc
自信男孩 2012-09-29
  • 打赏
  • 举报
回复
你的参数不够哦,在编译时应该会给你警告提示。当然你需要打开警告提示。
mujiok2003 2012-09-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
printf("\r\n12222.SWB=%02x\r\n",helll);有问题。

printf("\r\n12222SWB=%02x\r\n",helll); 不加点就会显示正常!!
[/Quote]

什么编译器? "\r\n12222.SWB=%02x\r\n"中的'.'就是普通字符,不该影响输出格式。
xiaohuh421 2012-09-29
  • 打赏
  • 举报
回复
你要注意, 0xX使用是要注意有符号,无符号问题.

最好是强制转换成无符号数.

printf("\r\n12222SWB=%02x\r\n",(BYTE)helll); //BYTE 是 unsigned char
AIGPTchina 2012-09-29
  • 打赏
  • 举报
回复
printf("\r\n12222.SWB=%02x\r\n",helll);有问题。

printf("\r\n12222SWB=%02x\r\n",helll); 不加点就会显示正常!!
AIGPTchina 2012-09-29
  • 打赏
  • 举报
回复
printf("%02X")也正常 .printf("%x")正常

printf("%02x")不正常!!

69,369

社区成员

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

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