假设我有一个字节大小的整数列表。前四个字节(列表中的前四个项目)实际上是单精度浮点数的组成部分。我想要将这4个字节连接起来,然后转换为浮点数。我该如何做?
File myFile = new File('binaryfile.bin')
List<int> fileBytes = myFile.readAsBytes()
double myFloat = generateFloat(fileBytes.getRange(0, 4)); // how do I make this?
假设我有一个字节大小的整数列表。前四个字节(列表中的前四个项目)实际上是单精度浮点数的组成部分。我想要将这4个字节连接起来,然后转换为浮点数。我该如何做?
File myFile = new File('binaryfile.bin')
List<int> fileBytes = myFile.readAsBytes()
double myFloat = generateFloat(fileBytes.getRange(0, 4)); // how do I make this?
使用类型化数据数组。
引用ByteData
的描述:
一个固定长度的随机访问字节序列,还提供了对由这些字节表示的定宽整数和浮点数进行随机和非对齐访问的支持。 ByteData可用于从外部源(如网络或文件系统)打包和解包数据。
继续你的示例
import 'dart:io'
import 'dart:typed_data';
...
File myFile = new File('binaryfile.bin')
List<int> fileBytes = myFile.readAsBytesSync();
// Turn list of ints into a byte buffer
ByteBuffer buffer = new Int8List.fromList(fileBytes).buffer;
// Wrap a ByteData object around buffer
ByteData byteData = new ByteData.view(buffer);
// Read first 4 bytes of buffer as a floating point
double x = byteData.getFloat32(0);
然而,请注意你的数据的字节序。
其他人可能会指出更好的将数据从文件读入ByteBuffer
中的方法。