Bra*_*van 1 c++ casting bitwise-operators
我正在尝试编写一个函数,将一组字节重新解释为float.我已经看过一个Stackoverflow问题,它引导我尝试reinterpret_cast<>()一个字符数组,我开始尝试将一个浮点数拆分为chars然后再重新组装它,但这只给了我看似随机的数字,而不是我认为值应该是,因为每次输出都不同.一些不同的例子是:
1.58661e-038
3.63242e-038
2.53418e-038
Run Code Online (Sandbox Code Playgroud)
float变量应包含值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;
Run Code Online (Sandbox Code Playgroud)
给我
1.75384e-038
Run Code Online (Sandbox Code Playgroud)
当然,每次运行程序时都会有不同的数字.但有趣的是,如果我将代码放在一个循环中并在一次运行中执行几次,则输出保持一致.这导致我认为它可能是一个内存位置,但如果是这样,我不确定如何访问变量的实际值 - 解除引用操作符不起作用,因为它不是指针.
所以我的问题是 - 如何将类型的变量float(以及稍后的a double)拆分成单个字节(允许我修改位),然后重新组装它.
任何帮助将不胜感激.
bytes是一个指针.
更改
float f1 = reinterpret_cast<float&>(bytes);
Run Code Online (Sandbox Code Playgroud)
至
float f1 = *reinterpret_cast<float*>(bytes);
// Cast to a different pointer... ^
// ^ ...and dereference that pointer.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
56 次 |
| 最近记录: |