我想打印浮点数的十六进制表示形式,但有一些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
也是如此。