c语言 - 为什么当我指定 "%.2x" 时我会得到 8 个十六进制数字



我想打印浮点数的十六进制表示形式,但有一些f被意外打印出来。

这是我正在使用的代码:

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

这就是我得到的:

ffffffcd
ffffffcc
4c
3e

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

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

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

从技术上讲,printf 的参数应该投射到unsigned int但通常认为依赖提升到int的非负值是安全的,即使对于%x也是如此。

最新更新