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