在Dart中连接字节

时间:2014-08-21 22:42:05

标签: types dart binaryfiles

假设我有一个字节大小的整数列表。前4个字节(列表中的前4个项)实际上是单精度浮点数的组成部分。我想连接4个字节并将它们转换为浮点数。我该怎么做?

File myFile = new File('binaryfile.bin')
List<int> fileBytes = myFile.readAsBytes()
double myFloat = generateFloat(fileBytes.getRange(0, 4)); // how do I make this?

1 个答案:

答案 0 :(得分:7)

使用typed data arrays

引用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);

但是,请注意数据的endianness

其他人可能会指出将文件中的数据转换为ByteBuffer的更好方法。