c++ - 需要在内存 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:建议的更详细的解释。
解决方案
这是更接近您想要的东西。
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 。
推荐阅读
- javascript - 希望为 React Button onClick 事件向组件输出时间戳
- internet-explorer-11 - IE11中expires中可以指定哪些日期格式=
set-Cookie 标头的字段? - ios - 如何快速读取数组和枚举数据
- http - HTTP URL 的用户名部分的确切语义是什么?
- javascript - sqlite3 模块中的 ROW_NUMBER 函数
- c# - Visual Studio 2019 intellisense 在每个不是 .NET 的命名空间下都显示红色曲线
- ios - 核心数据似乎没有保存
- node.js - 如何让 Node.js 等待包含发布请求的函数调用?
- javascript - 列出文件夹内容,创建缩略图
- java - java将值数组映射到奇数值的索引