Dart 将两个 Uint8 转换为一个 Uint16

Vin*_*ann 3 byte integer type-conversion dart flutter

我正在构建一个应用程序来通过蓝牙从分光光度计读取数据。测量值作为两个字节发送,旨在转换为一个无符号的 16 位整数。感谢我用于蓝牙通信的库,这两个字节被转换为两个 Uint8List。

我环顾四周,但没有找到任何解决方案。我怎么会在这里?

我不在乎它是否漂亮。哎呀,如果你能提供一个使用黑魔法的解决方案,我会使用它。它唯一要做的就是完成它的工作,即使它很慢。我只需要取出三个 Uint16,可接受的时间跨度约为 1 秒,因此即使是最低效的解决方案也可以在这里完成。

fsw*_*fsw 5

您可以简单地使用二进制移位,这应该是非常有效的:

(list[0] << 8) + list[1]
Run Code Online (Sandbox Code Playgroud)

演示:

var list = new Uint8List(2);
list[0] = 1;
list[1] = 1;
print((list[0] << 8) + list[1]);
Run Code Online (Sandbox Code Playgroud)

  • 二进制移位应转换为单处理器操作。转换为字符串、连接并转换回来实际上会转化为大量逻辑和内存操作。此外,这个运算符正是针对这种情况,因此在我看来,您的解决方案还需要更复杂且可读性较差的源代码。但如果你不介意的话,那么它肯定会起作用。干杯。 (2认同)