在Dart中连接字节

Wil*_*iam 5 types binaryfiles dart

假设我有一个字节大小的整数列表.前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?
Run Code Online (Sandbox Code Playgroud)

Arg*_*tus 7

使用类型化数据数组.

引用以下描述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);
Run Code Online (Sandbox Code Playgroud)

但是,请注意数据的字节顺序.

其他人可能会指出从文件中获取数据的更好方法ByteBuffer.