【问题标题】:Dart fill ByteData with List<int>Dart 用 List<int> 填充 ByteData
【发布时间】: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


    【解决方案1】:

    ByteData 表示以字节为单位的内存区域,但没有告诉我们如何表示该内存块中的数据。

    通常,我们会使用来自dart:typed_data 的特定数据类型之一,例如Uint8ListInt8ListUint16List 等功能更多。

    但您可以通过查看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 中不可用
    • 是的,如果您的内容是混合数据,那么 ByteData 是一种很好的方法。只需在需要将此 ByteData 的块视为特定类型时创建视图。在我的示例中,只有 ByteData 实例,然后我通过数据视图对其进行操作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-26
    • 2022-01-17
    • 1970-01-01
    • 2020-10-28
    • 2011-11-29
    • 1970-01-01
    相关资源
    最近更新 更多