为什么我指定“%.2x”时会得到8个十六进制数字

问题描述 投票:0回答:1

我想打印浮点数的十六进制表示,但是某些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
c assembly hex floating
1个回答
0
投票

该代码通过使用不正确的格式说明符导致未定义的行为。 %x仅用于unsigned int,但您提供的类型为char

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

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

[从技术上讲,printf的参数应强制转换为unsigned int,但通常认为,即使对于int,依靠提升为%x的非负值也是安全的。

© www.soinside.com 2019 - 2024. All rights reserved.