【发布时间】: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个字符。如果它更宽,那么它会破坏字段宽度,而不是输出错误截断的数字。