我有一个 modbus 设备,它以 IEEE754 格式保存 32 位浮点值。 在当然使用 C 的 arduino 中,我可以检索那些分成两个 16 位值的值,这些值在 uint16_t 值中返回。 (来自 modbus 设备的每个寄存器都有 16 位,因此值被分成两个寄存器,但我使用的库返回 uint16_t)。
我现在正试图弄清楚如何将这两个 uint16_t 转换为 1 个 32 位 float ,我想得到一些帮助,因为我对如何将其转换为这种类型的值感到困惑。
预先感谢您的帮助。
编辑:
为了澄清,这是一张格式图片
最佳答案
绕过 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/