将整数的二进制数据转换为浮点数

时间:2019-09-26 14:59:09

标签: c++ floating-point

让我说我有一个整数:

unsigned long long int data = 4599331010119547059;

现在,我想将此数据转换为双精度型。我基本上想更改类型,但要保持原样。对于给定的示例,浮点值为0.31415926536

如何在C ++中做到这一点?我看到了一些使用Union的方法,但建议不要使用这种方法。

3 个答案:

答案 0 :(得分:4)

从C ++ 20开始,您可以使用std::bit_cast

std::bit_cast<double>(data)

在C ++ 20之前,您可以使用std::memcpy

double d;
static_assert(sizeof d == sizeof data);
std::memcpy(&d, &data, sizeof d);

请注意,结果会因浮点表示形式(尽管IEEE-754普遍存在)以及浮点和整数类型是否具有相同的字节序而有所不同。

答案 1 :(得分:3)

考虑其面值问题(假设您有这样做的正当理由!),这是当前C ++标准中这样做的唯一正确方法:

int i = get_int(); 
float x;
static_assert(sizeof(float) == sizeof(int), "!!!");
memcpy(&x, &i, sizeof(x));

答案 2 :(得分:-2)

您可以使用reinterpret_cast

float f = reinterpret_cast<float&>(data);

就您的价值而言,我没有得到0.314 ...但这就是您可以做到的方式。