C打印中的十六进制宽度无法正常工作



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

cmd_buf作为const char *传递

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

但我看到的是:

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

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

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

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

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

最新更新