首页 > 解决方案 > C 打印中的十六进制宽度不能正常工作?

问题描述

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

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应该只打印两个字符吗?为什么它表现得像这是一个有符号的值?

标签: cprintf

解决方案


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


推荐阅读