【发布时间】:2021-12-10 04:34:51
【问题描述】:
List<int> l = [ 1, 2, 3, 4 ];
var b = ByteData(10);
我想知道用l 中的数据填充b(位置4 ~ 7)的最简单方法是什么。
我当然可以遍历l,然后一一填充b。但这只是更大解决方案的一部分。所以希望有更简单的方法(方便以后维护)。
【问题讨论】:
标签: dart bytebuffer
List<int> l = [ 1, 2, 3, 4 ];
var b = ByteData(10);
我想知道用l 中的数据填充b(位置4 ~ 7)的最简单方法是什么。
我当然可以遍历l,然后一一填充b。但这只是更大解决方案的一部分。所以希望有更简单的方法(方便以后维护)。
【问题讨论】:
标签: dart bytebuffer
ByteData 表示以字节为单位的内存区域,但没有告诉我们如何表示该内存块中的数据。
通常,我们会使用来自dart:typed_data 的特定数据类型之一,例如Uint8List、Int8List、Uint16List 等功能更多。
但您可以通过查看ByteData 轻松获得相同的效果。在这个例子中,我猜你想插入你的号码为Uint8:
import 'dart:typed_data';
void main() {
List<int> l = [ 1, 2, 3, 4 ];
var b = ByteData(10);
var uInt8ListViewOverB = b.buffer.asUint8List();
uInt8ListViewOverB.setAll(4, l);
print(uInt8ListViewOverB); // [0, 0, 0, 0, 1, 2, 3, 4, 0, 0]
}
我建议阅读ByteBuffer 上不同方法的文档(由buffer 返回)。你可以例如如果您的ByteData 需要包含不同类型的数据,则对您的ByteData 的有限部分进行子视图:
https://api.dart.dev/stable/2.15.0/dart-typed_data/ByteBuffer/asUint8List.html
【讨论】:
ByteData 主要是因为我需要使用getInt32()、setUint16() 等函数... List 中不可用