首页 > 解决方案 > 需要在内存 C++ 中放置一个浮点数作为 HEX

问题描述

标题。需要将bridgeSymbol十六进制值放入myVariable内存缓冲区。我已经尝试了所有想到的演员表(bit_cast,reinterpret_cast)。

预期结果应该是myVariable指针地址处(float)bridgeSymbol的十六进制值。

我错过了什么?

uintptr_t myVariable = 0xC70BBF5C;

float bridgeSymbol = *(float*)(&myVariable);        //Big endian -35775.36 OK!
bridgeSymbol = bridgeSymbol / 10;                   //some random operation  = -3577.5

myVariable = (uintptr_t)bridgeSymbol;               //expected 0xc55f9800 but getting random values

编辑1:建议的更详细的解释。

标签: c++

解决方案


这是更接近您想要的东西。

 static_assert(sizeof(float) == 4);
 myVariable = *(uint32_t*)(&bridgeSymbol);

上面基本就是说,把float占用的4个字节的内存当作一个32位的uint,然后再赋值给myVariable。这与您将原始值转换为浮点数的操作完全相反。

问题是你myVariable被声明为 uintptr_t,它在 32 位平台上是 32 位的。但是,一旦您的代码编译为 64 位,它将是一个 64 位数字。

在任何架构上,浮点数几乎总是 32 位的。所以我建议你也声明myVariable为 uin32_t 。


推荐阅读