dart ffi 如何将 Uint8List 复制到指针<Uint8>?



我读取了一个文件var list = await file.readAsBytes();,并希望将其复制到clangPointer<Uint8> buf = malloc.allocate(list.length);。我知道我能做到for (var i = 0; i < list.length; i++) buf.elementAt(i).value = list[i];。有没有其他方法可以像叮当memcpy一样做到这一点?

目前我们支持您的代码。

我们希望支持在leafFFI调用(GitHub问题(中允许本机代码访问Uint8List的内容,然后可以在本机代码中使用memcpy函数来进行复制。

或者,我们可以在dart:ffi本身中添加对PointerTypedData之间复制的支持(GitHub问题(。

作为一种变通方法,如果你被速度阻挡,你可以使用dart_api.c(仅在Dart单机版中,而不是Flutter(:

DART_EXPORT Dart_Handle Dart_TypedDataAcquireData(Dart_Handle object,
Dart_TypedData_Type* type,
void** data,
intptr_t* len);

您可以将TypedDatadart:ffi传递给本机以获得Dart_Handle,然后执行memcopy。

相关内容

最新更新