C 中 CHAR 处理成 16进制时,自动补位了?

色郎中 2015-01-31 11:32:12


发现发送的16进制值大于 7F时, 在程序中,自动补了3个字节的数据,如发送 80,程序打印出来:FFFFFF80

ubuntu12.04系统




...全文
307 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
你怎么了熊吉 2015-01-31
  • 打赏
  • 举报
回复
你可以把char改成unsigned char试一下,那样0x80仍然是正的,就没有这个问题

#include <stdio.h>
int main()
{
    char c1=0x80;
    unsigned char c2=0x80;
    printf("%02x\n", c1);
    printf("%02x\n", c2);
    return 0;
}
  • 打赏
  • 举报
回复
%x 为 unsigned int
你怎么了熊吉 2015-01-31
  • 打赏
  • 举报
回复
recvbuf是char型的吧? char是一个字节的,所以0x7F以上就是负数了 而%x是用来输出int的,所以你的char会被扩展到4字节,对于0x7F,扩展后是0x0000007F,前面的0可省略,所以仍然输出0x7F 对于0x80,扩展后就是0xFFFFFF80了,前面的F不能省略,所以会输出来 至于%02x里的02,是不足2位补到2位,但超过2位不会截断

69,373

社区成员

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

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