背景
c++层数据都是二进制,需要转换成透传到ets层给业务使用,但是鸿蒙的使用下面两个api创建出来的二进制数组数据都是错误的。
接口
fer: 这个接口只能创建空的二进制数组,没办法把char的内容丢进去创建
: 这个接口支持创建二进制数组时候丢入初始化参数,但是如果你data是非 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_utf8(env, args[0], type, sizeof(type), &eventTypeLen); //正确,把type转换成无符号的char*,然后作为参数传入就可以得到正确二进制流 unsigned char *arrayBuffer = new unsigned char[sizeof(type)]; //复制内容 memcpy(arrayBuffer, reinterpret_cast(type), sizeof(type)); napi_create_external_arraybuffer( env, arrayBuffer, eventTypeLen, [](napi_env env, void *data, void *hint) {}, nullptr, &result1); //这里返回的二进制数组到ets层,正常转换回字符串的 return result1;
创建方案二
1.方案二是创建一个空的,然后给里面的data进行赋值,但是比较诡异我没想懂的是,fer 的第三个参数data,并没有和第四个参数关联,但是修改data的值确能应该的值
//napi_create_arraybuffer的源码 NAPI_EXTERN napi_status napi_create_arraybuffer(napi_env env, size_t byte_length, void** data, napi_value* result) { NAPI_PREAMBLE(env); CHECK_ARG(env, data); CHECK_ARG(env, result); auto vm = reinterpret_cast(env)->GetEcmaVm(); uint8_t** values = (uint8_t**)(data); Local res = panda::ArrayBufferRef::New(vm, byte_length); if (values != nullptr) { *values = reinterpret_cast(res->GetBuffer()); } *result = JsValueFromLocalValue(res); return GET_RETURN_STATUS(env); }
2.第二种创建方法例子
//接收ets传入的string字符串 char type[64] = {0}; size_t eventTypeLen = 0; napi_get_value_string_utf8(env, args[0], type, sizeof(type), &eventTypeLen); napi_value result2 = nullptr; void* data = nullptr; napi_create_arraybuffer(env, sizeof(type), &data, &result2); memcpy(data, type, sizeof(type)); return result2;
审核编辑 黄宇
———END———
限 时 特 惠: 本站每日持续更新海量各大内部创业教程,永久会员只需109元,全站资源免费下载 点击查看详情
站 长 微 信: nanadh666
声明: 本站内容转载于网络,版权归原作者所有,仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任,若侵犯到你的版权利益,请联系我们,会尽快删除处理!