我想打印浮点数的十六进制表示,但是某些f
被意外打印。
这是我正在使用的代码:
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
该代码通过使用不正确的格式说明符导致未定义的行为。 %x
仅用于unsigned int
,但您提供的类型为char
。
您可以通过更改ptr
的类型来解决此问题:
unsigned char *ptr = (char*)&f;
[从技术上讲,printf的参数应强制转换为unsigned int
,但通常认为,即使对于int
,依靠提升为%x
的非负值也是安全的。