printf:准确打印十六进制值
使用字符向量时,以十六进制打印各个字节时通常会遇到差异使用 printf 格式化。当尝试打印单个字符(只有一个字节)但却获取多字节值时,就会出现此问题。
此行为背后的原因在于 printf 的类型匹配。 %x 修饰符需要一个 unsigned int 参数,并且当传递给变量参数函数时,char 通常会提升为 int。在打印单个字符值时,此提升可能会导致错误的结果。
要解决此问题,必须将 char 显式转换为无符号 int 以确保结果可预测。例如,以下代码将准确地打印单个字节:
printf(" 0x%1x ", (unsigned)pixel_data[0]);
需要注意的是,字段宽度为 1 在这种情况下并不是特别有用,因为它只是指定了最小位数显示。但是,如果您想将字节值视为无符号值并在转换为无符号 int 时将其零扩展,则可以对向量使用 unsigned char 或执行特定的转换:
printf(" 0x%x ", (unsigned)(unsigned char)pixel_data[0]);
或者,您可以在提升后应用掩码操作以获得相同的结果:
printf(" 0x%x ", (unsigned)pixel_data[0] & 0xffU);
通过遵循这些技巧,您可以确保 printf 准确地打印十六进制值,即使处理单个字节也是如此。
以上是如何使用printf准确打印单字节的十六进制值?的详细内容。更多信息请关注PHP中文网其他相关文章!