一个无符号的long long变量,其值为十六进制的“ 40 36 70 A3 D7 0A 3D 71
”。如果使用%f
转换说明符进行打印,则可以从IEEE-754获得正确的转换。即使丢失了一些小数,如何将这个变量转换为浮点数或int
?
我尝试过强制转换,但它给我带来不好的价值。此处的示例:
unsigned long long hex = 0x403670A3D70A3D71;
float cast_float = (float)hex;
答案 0 :(得分:1)
假设unsigned long long
变量包含一个有效的double
值,则可以使用 type punning ,例如,使用并集:
union
{
unsigned long long i;
double f;
} value = { .i = 0x403670A3D70A3D71 };
printf("0x%llx is %f\n", value.i, value.f);
请注意,如果整数中的值与系统上的有效双精度浮点值具有相同的位模式,则这仅在内有效。否则可能导致不确定的行为。
现在,如果要将其转换为int
值22
(因为0x403670A3D70A3D71
是double
值22.44
的二进制表示),则您首先需要使用类型校正来获取浮点值,然后使用floor
函数将其截断为整数值(但仍为浮点类型),最后将其强制转换为{{1} }:
int