C++ 转换一个整数';使二进制数据浮动
假设我有一个整数:C++ 转换一个整数';使二进制数据浮动,c++,floating-point,C++,Floating Point,假设我有一个整数: 无符号长整型数据=459933101119547059; 现在我想把这个数据转换成双精度的。我基本上想更改类型,但保持位的原样。对于给定示例,浮点值为0.31415926536 如何在C++中实现这一点?我看到一些使用Union的方法,但许多人建议不要使用这种方法。您可以使用重新解释\u cast: float f = reinterpret_cast<float&>(data); std::bit_cast<double>(data)
无符号长整型数据=459933101119547059;
现在我想把这个数据转换成双精度的。我基本上想更改类型,但保持位的原样。对于给定示例,浮点值为0.31415926536
如何在C++中实现这一点?我看到一些使用Union的方法,但许多人建议不要使用这种方法。您可以使用
重新解释\u cast
:
float f = reinterpret_cast<float&>(data);
std::bit_cast<double>(data)
float f=重新解释铸件(数据);
为了你的价值,我没有得到0.314。。。但这就是你可以做到的。你可以使用
重新解释cast
:
float f = reinterpret_cast<float&>(data);
std::bit_cast<double>(data)
float f=重新解释铸件(数据);
为了你的价值,我没有得到0.314。。。但是这就是你能做到的。< /P> < P>从它的面值看问题(假设你有一个正当的理由这样做),这是当前C++标准中唯一的正确方法:
int i = get_int();
float x;
static_assert(sizeof(float) == sizeof(int), "!!!");
memcpy(&x, &i, sizeof(x));
从表面上看问题(假设你有一个正当的理由这样做),这是当前C++标准中唯一的正确方法:
int i = get_int();
float x;
static_assert(sizeof(float) == sizeof(int), "!!!");
memcpy(&x, &i, sizeof(x));
从C++20开始,您可以使用
std::bit\u cast
:
float f = reinterpret_cast<float&>(data);
std::bit_cast<double>(data)
请注意,结果将根据浮点表示(IEEE-754是普遍存在的)以及浮点和整数类型是否具有相同的endianness而有所不同。自C++20以来,您可以使用
std::bit\u cast
:
float f = reinterpret_cast<float&>(data);
std::bit_cast<double>(data)
请注意,结果将根据浮点表示(IEEE-754是普遍存在的)以及浮点和整数类型是否具有相同的endianness而有所不同。为什么要这样做?您在这里试图实现的更大目标是什么?@scohe001从文件中读取浮点数。首先,数据转换为int,如果需要,这个int需要转换为float。为什么要这样做?您在这里试图实现的更大目标是什么?@scohe001从文件中读取浮点数。首先,数据被转换成整数,如果需要,这个整数需要转换成浮点。欢迎来到未定义的行为世界,在那里一切都是可能的,没有什么是确定的@SergeyA reinterpret_cast不是未定义的。@n.m.该cast不是未定义的,但通过引用访问不存在的
float
对象是UB。@n.m.cast定义良好。不允许访问浮动。诚然,答案中的代码不访问浮点,但在问题的上下文中,可以合理地假设以后会访问。欢迎来到未定义行为领域,在这里一切都是可能的,没有什么是确定的@SergeyA reinterpret_cast不是未定义的。@n.m.该cast不是未定义的,但通过引用访问不存在的float
对象是UB。@n.m.cast定义良好。不允许访问浮动。诚然,答案中的代码不访问float,但在问题的上下文中,可以合理地假设稍后会访问。