让我说我有一个整数:
unsigned long long int data = 4599331010119547059;
现在,我想将此数据转换为双精度型。我基本上想更改类型,但要保持原样。对于给定的示例,浮点值为0.31415926536
。
如何在C ++中做到这一点?我看到了一些使用Union的方法,但建议不要使用这种方法。
答案 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 ...但这就是您可以做到的方式。