【问题标题】:Hex width in C printing not working properly?C 打印中的十六进制宽度不能正常工作?
【发布时间】:2021-09-16 09:59:49
【问题描述】:

我正在打印出三个字节的数组,如下所示:

cmd_buf 作为const char * 传递

    for (ii = 0; ii<=2; ii++) {
        printf("byte[%0d] = %02x\n", ii, cmd_buf[ii]);
    }

但我看到了这个:

# BUFFER IS b4a602
# byte[0] = ffffffb4
# byte[1] = ffffffa6
# byte[2] = 02

如果我这样做,它会正常工作:

       printf("byte[%0d] = %02x\n", ii, (unsigned char) cmd_buf[ii]);

%02x 不应该只打印两个字符吗?为什么它表现得像一个有符号值?

【问题讨论】:

  • 它将打印 from 两个字符及以上,即用0 填充单个数字。 “为什么它表现得像一个带符号的值?” - 因为你的 char 类型是带符号的。
  • 除了%02x 不是打印2个字符,而是最少 2个字符。如果它更宽,那么它会破坏字段宽度,而不是输出错误截断的数字。

标签: c printf


【解决方案1】:

%x 是 int - 它隐式地将您的签名字符转换为 4 字节以匹配。使用 %hx 缩写和 %hhx 字符。在您的情况下,您可能打算使用 %02hhx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-14
    • 2013-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-18
    • 2013-05-02
    • 1970-01-01
    相关资源
    最近更新 更多