【问题标题】:Printf Hex Formatting Leads Wrong Output [duplicate]Printf 十六进制格式导致错误的输出[重复]
【发布时间】:2016-08-22 23:50:09
【问题描述】:

我有以下 C 代码。

char a[] = "\x7f\x80";
printf("0x%02x\n",a[0]);
printf("0x%02x",a[1]);

它应该打印出来,

0x7f
0x80

但是我越来越关注了?

0x7f
0xffffff80

我必须进行哪些更改才能获得输出 0x7f 0x80

谢谢,

【问题讨论】:

  • (unsigned char)a[1]
  • 非常感谢!我实际上尝试了 printf("0x%02x\n",(unsigned)a[0]) 。
  • 你也可以"0x%02hhx\n".
  • 正如迈克尔所说。是类型提升时的符号扩展。见stackoverflow.com/questions/9715984/…

标签: c


【解决方案1】:

使用正确的类型和转换说明符:

unsigned char a[] = "\x7f\x80";
printf("0x%02hhx\n",a[0]);
printf("0x%02hhx",a[1]);

转换说明符x 需要无符号类型,长度修饰符hh 用于unsigned char

【讨论】:

    猜你喜欢
    • 2013-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    相关资源
    最近更新 更多