c++ - 将 2 uint16_t 转换为 32 浮点 IEEE-754 格式

标签 c++ arduino modbus

我有一个 modbus 设备,它以 IEEE754 格式保存 32 位浮点值。 在当然使用 C 的 arduino 中,我可以检索那些分成两个 16 位值的值,这些值在 uint16_t 值中返回。 (来自 modbus 设备的每个寄存器都有 16 位,因此值被分成两个寄存器,但我使用的库返回 uint16_t)。

我现在正试图弄清楚如何将这两个 uint16_t 转换为 1 个 32 位 float ,我想得到一些帮助,因为我对如何将其转换为这种类型的值感到困惑。

预先感谢您的帮助。

编辑:

为了澄清,这是一张格式图片 IEEE754

最佳答案

绕过 strict aliasing 的唯一方法或无效的类型双关实际上是通过使用 std::memcpy :

uint16_t const value[2] = { low_word, high_word };  // Assuming little-endianness
float f;

std::memcpy(reinterpret_cast<void*>(&f), reinterpret_cast<void const*>(value), sizeof f);

关于c++ - 将 2 uint16_t 转换为 32 浮点 IEEE-754 格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59729914/

相关文章:

c++ - 这个容器实现是否完全明智?

C++: friend 模板类/模板非类型参数

button - Arduino 由于使用按钮

php - 这种字节顺序转换是否正确?

python - 使用 libmodbus C 为 Open-WRT 路由器编写 modbus 程序(将 Python 应用程序重写为 C)

c++ - 不调用对象的析构函数是未定义的行为吗?

c++ - 如何将我的应用程序带到窗口顶部

c++ - 意外的变量行为arduino fastLED ws2812b

python - Arduino 加速计到 Python 输出

java - java中列出所有串口