我正在尝试编写一个将一组字节重新解释为float
的函数。我查看了一个Stackoverflow question,它引导我尝试reinterpret_cast<>()
一个字符数组,然后我开始尝试将一个浮点数拆分为chars然后重新组合它,但这只会给我看似随机的数字而不是比我认为的值应该是,因为每次输出都不同。一些不同的例子是:
1.58661e-038
3.63242e-038
2.53418e-038
浮点变量应包含值5.2。
编译代码:
float f = 5.2;
unsigned char* bytes = reinterpret_cast<unsigned char*>(&f);
float f1 = reinterpret_cast<float&>(bytes);
std::cout << f1 << std::endl;
给了我
1.75384e-038
当然,每次运行程序时都会有不同的数字。然而,有趣的是,如果我将代码放在一个循环中并在一次运行中执行几次,则输出保持一致。这导致我认为它可能是一个内存位置,但如果是这样,我不确定如何访问变量的实际值 - 解除引用操作符不起作用,因为它不是指针。
所以我的问题是 - 如何将float
类型的变量(以及稍后的double
)分成单个字节(允许我修改位),然后重新组合它。
非常感谢任何帮助。
答案 0 :(得分:6)
bytes
是指针。
更改
float f1 = reinterpret_cast<float&>(bytes);
到
float f1 = *reinterpret_cast<float*>(bytes);
// Cast to a different pointer... ^
// ^ ...and dereference that pointer.