使用字符向量 (pixel_data) 时,将单个字节打印为十六进制值 (printf(" 0x %1x ", Pixel_data[0])) 可能会意外生成一个四字节整数(0xfffffff5) 而不是预期值 (0xf5)。
Printf 通常需要 %x 修饰符的无符号整数参数。然而,当传递给 printf 等 varargs 函数时,char 会被提升为 int。此提升会导致打印额外的字节。
为了确保可预测的结果,请将 char 显式转换为无符号 int:
printf(" 0x%1x ", (unsigned)pixel_data[0]);
printf(" 0x%x ", (unsigned)(unsigned char)pixel_data[0]);
printf(" 0x%x ", (unsigned)pixel_data[0] & 0xffU);
%1x 字段宽度指定要显示的最小位数。然而,它在这种情况下的用处有限,因为始终需要至少一位数字。
以上是从 Char 向量打印十六进制字节时,为什么 `printf` 显示意外的输出?的详细内容。更多信息请关注PHP中文网其他相关文章!