背景
c++层数据都是二进制,需要转换成arrayBuffer透传到ets层给业务使用,但是鸿蒙的使用下面两个api创建出来的二进制数组数据都是错误的。
接口
napi_create_arraybuffer: 这个接口只能创建空的二进制数组,没办法把char的内容丢进去创建
napi_create_external_arraybuffer: 这个接口支持创建二进制数组时候丢入初始化参数,但是如果你data是非unsigned char。你里面的数据就会转换错乱,导致二进制的数据无法再转换成正确的字符串
代码实例
错误的代码例子:
//接收ets传入的string字符串
char type[64] = {0};
size_t eventTypeLen = 0;
napi_get_value_string_utf8(env, args[0], type, sizeof(type), &eventTypeLen);
//错误的二进制数组写法
napi_value result1 = nullptr;
napi_create_external_arraybuffer(env, data, eventTypeLen, [](napi_env env, void *data, void *hint) {}, nullptr, &result1);
//这里返回的二进制数组到ets层,是无法正常转换回字符串的
return result1;
正确的代码例子:
//接收ets传入的string字符串
char type[64] = {0};
size_t eventTypeLen = 0;
napi_get_value_string_ut