如何将unsigned long long转换为C中的float / int?

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

一个无符号的long long变量的值以十六进制为“ 40 36 70 A3 D7 0A 3D 71”。如果使用%f转换说明符进行打印,则可以从IEEE-754获得正确的转换。即使丢失了一些小数,我如何也可以将该变量转换为浮点数或整数。

我尝试过强制转换,但它给了我不好的价值。此处的示例:

unsigned long long hex = 0x403670A3D70A3D71;
float cast_float = (float)hex;
c hex
1个回答
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);

请注意,如果整数中的值具有与系统上有效的双精度浮点值相同的位模式,则这是有效的[[only。否则可能导致undefined behavior

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