如何在 Dart 中将字节数组转换为双精度值(浮点值)
How to convert a byte array to a double (float value) in Dart
基于this question,我在Dart中有一个字节列表:
final data = [123, 34, 106, 115, 111, 110, 114, 112, 99, 34, 58, 34, 50, 46, 48, 34, 44, 34, 109, 101, 116, 104, 111, 100, 34, 58, 34, 115];
它表示来自 TensorFlow Lite 的 Float32 值。如何将其转换为可读的 double
值?
您的数据包含 28 个字节,并且由于它表示 32 位浮点值(每个浮点值是 4 个字节),因此相当于七个 32 位值。
final data = [
123, 34, 106, 115, // 1
111, 110, 114, 112, // 2
99, 34, 58, 34, // 3
50, 46, 48, 34, // 4
44, 34, 109, 101, // 5
116, 104, 111, 100, // 6
34, 58, 34, 115, // 7
];
ByteData
class from the dart:typed_data
库为您提供了对字节数据的不同看法。你想要的是 Float32 视图,它会给你一个 double
in Dart.
final bytes = Uint8List.fromList(data);
final byteData = ByteData.sublistView(bytes);
double value = byteData.getFloat32(0);
print(value); // 8.433111377393183e+35
getFloat32(0)
中的0
表示要获取字节数组中索引0
开始的32位浮点值。不过,这只会给你七个中的第一个值,所以如果你想要其余的,你需要遍历整个字节列表:
for (var i = 0; i < data.length; i += 4) {
print(byteData.getFloat32(i));
}
在每个循环中,您将索引增加 4 以获得下一个 32 位浮点值的开头。 运行 该循环,您将看到所有七个值的结果:
8.433111377393183e+35
7.3795778785962275e+28
2.9925614505443553e+21
1.0139077133430874e-8
2.308231080230816e-12
7.366162972792583e+31
2.522593777484324e-18
另见
基于this question,我在Dart中有一个字节列表:
final data = [123, 34, 106, 115, 111, 110, 114, 112, 99, 34, 58, 34, 50, 46, 48, 34, 44, 34, 109, 101, 116, 104, 111, 100, 34, 58, 34, 115];
它表示来自 TensorFlow Lite 的 Float32 值。如何将其转换为可读的 double
值?
您的数据包含 28 个字节,并且由于它表示 32 位浮点值(每个浮点值是 4 个字节),因此相当于七个 32 位值。
final data = [
123, 34, 106, 115, // 1
111, 110, 114, 112, // 2
99, 34, 58, 34, // 3
50, 46, 48, 34, // 4
44, 34, 109, 101, // 5
116, 104, 111, 100, // 6
34, 58, 34, 115, // 7
];
ByteData
class from the dart:typed_data
库为您提供了对字节数据的不同看法。你想要的是 Float32 视图,它会给你一个 double
in Dart.
final bytes = Uint8List.fromList(data);
final byteData = ByteData.sublistView(bytes);
double value = byteData.getFloat32(0);
print(value); // 8.433111377393183e+35
getFloat32(0)
中的0
表示要获取字节数组中索引0
开始的32位浮点值。不过,这只会给你七个中的第一个值,所以如果你想要其余的,你需要遍历整个字节列表:
for (var i = 0; i < data.length; i += 4) {
print(byteData.getFloat32(i));
}
在每个循环中,您将索引增加 4 以获得下一个 32 位浮点值的开头。 运行 该循环,您将看到所有七个值的结果:
8.433111377393183e+35
7.3795778785962275e+28
2.9925614505443553e+21
1.0139077133430874e-8
2.308231080230816e-12
7.366162972792583e+31
2.522593777484324e-18