将两个 16 位寄存器转换为 32 位浮点值 flutter

Convert two 16 Bit Registers to 32 Bit float value flutter

我正在使用 Modbus flutter 库,读取我获得的 2 个寄存器:

[16177, 4660] 我需要一个函数将其转换为 32 位浮点值:0.7

我找到了这个函数

ByteBuffer buffer = new Uint16List.fromList(fileBytes).buffer;
ByteData byteData = new ByteData.view(buffer);
double x = byteData.getFloat32(0);

它说 0.000045747037802357227 交换字节值

你能帮忙吗

我总是发现从字节数组开始并向其中插入内容最简单。发生的事情是您的代码默认为本机字节顺序(显然 little),但您需要以大字节顺序执行此操作。

这是一个过于冗长的解决方案,您可以删除打印语句(和十六进制编解码器)

import 'dart:typed_data';
import 'package:convert/convert.dart'; // only needed for debugging

void main() {
  final registers = [16177, 4660];
  final bytes = Uint8List(4); // start with the 4 bytes = 32 bits

  var byteData = bytes.buffer.asByteData(); // ByteData lets you choose the endianness
  byteData.setInt16(0, registers[0], Endian.big); // Note big is the default here, but shown for completeness
  byteData.setInt16(2, registers[1], Endian.big);
  print(bytes); // just for debugging - does my byte order look right?
  print(hex.encode(bytes)); // ditto

  final f32 = byteData.getFloat32(0, Endian.big);
  print(f32);
}