首页 > 解决方案 > 为什么我指定“%.2x”时会得到 8 个十六进制数字

问题描述

我想打印浮点数的十六进制表示,但有一些fs 被意外打印。

这是我正在使用的代码:

float f = 0.2;
char *ptr = (char*)&f;
for (int i = 0; i < sizeof(float); i++)
    printf("%.2x\n", ptr[i]);

这就是我得到的:

ffffffcd
ffffffcc
4c
3e

标签: chex

解决方案


该代码使用不正确的格式说明符导致未定义的行为。%x仅适用于unsigned int,但您给出类型的参数char

您可以通过更改以下类型来解决此问题ptr

unsigned char *ptr = (char*)&f;

从技术上讲, printf 的参数应该被强制转换为,但通常认为依赖提升为even forunsigned int的非负值是安全的。int%x


推荐阅读