【问题标题】:An efficient way to convert ByteData in Dart to unsigned char* in C++?将 Dart 中的 ByteData 转换为 C++ 中的 unsigned char* 的有效方法?
【发布时间】:2020-04-12 19:23:12
【问题描述】:

我是这样做的:

Pointer<Uint8> _byteDataToPointer(ByteData byteData) {
  final uint8List = byteData.buffer.asUint8List();
  final length = uint8List.lengthInBytes;
  final result = allocate<Uint8>(count: length);

  for (var i = 0; i < length; ++i) {
    result[i] = uint8List[i];
  }

  return result;
}

在JNI中有没有像JNIEnv::GetByteArrayRegion这样更高效的方式?

非常感谢!

【问题讨论】:

    标签: c++ flutter dart flutter-desktop


    【解决方案1】:

    这总是会涉及到一个副本,那么还有什么比你的 for 循环更有效的吗?也许吧。

    分配您的Uint8Pointer 后,使用asTypedList 将其转换为Uint8List。现在您可以访问它的复制原语,如 setAll 和 setRange 以从源复制到目标。

    ByteData 的原始来源是什么?如果事先知道大小,是否可以先分配 Uint8Pointer,转换成类型数据,然后直接读取?

    【讨论】:

    • 谢谢~! asTypedList 是我需要的!
    • 而ByteData的原始来源是rootBundle.load,我找不到直接读入我的Uint8List的方法
    猜你喜欢
    • 2017-10-30
    • 1970-01-01
    • 2011-06-11
    • 2020-05-03
    • 2020-10-11
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 2011-10-19
    相关资源
    最近更新 更多