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

Ian*_*kel 1 c++ floating-point

假设我有一个整数:

unsigned long long int data = 4599331010119547059;
Run Code Online (Sandbox Code Playgroud)

现在我想将此数据转换为双精度。我基本上想更改类型,但保持这些位完全相同。对于给定的示例,浮点值是0.31415926536

我怎样才能在 C++ 中做到这一点?我看到一些使用 Union 的方法,但许多人建议不要使用这种方法。

eer*_*ika 5

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

std::bit_cast<double>(data)
Run Code Online (Sandbox Code Playgroud)

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

double d;
static_assert(sizeof d == sizeof data);
std::memcpy(&d, &data, sizeof d);
Run Code Online (Sandbox Code Playgroud)

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