首页 >后端开发 >C++ >从 Char 向量打印十六进制字节时,为什么 `printf` 显示意外的输出?

从 Char 向量打印十六进制字节时,为什么 `printf` 显示意外的输出?

Barbara Streisand
Barbara Streisand原创
2024-12-07 07:04:111006浏览

Why Does `printf` Show Unexpected Output When Printing Hexadecimal Bytes from a Char Vector?

打印十六进制字节时 printf 出现意外输出

使用字符向量 (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]);

注意事项变量类型

  • 将pixel_data定义为unsigned char,将字节视为无符号值。
  • 或者,在 printf 语句中转换为 unsigned char:
printf(" 0x%x ", (unsigned)(unsigned char)pixel_data[0]);
  • 转换为 unsigned int 时使用掩码操作进行零扩展:
printf(" 0x%x ", (unsigned)pixel_data[0] & 0xffU);

理解领域宽度

%1x 字段宽度指定要显示的最小位数。然而,它在这种情况下的用处有限,因为始终需要至少一位数字。

以上是从 Char 向量打印十六进制字节时,为什么 `printf` 显示意外的输出?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn