HarmonyOS 鸿蒙Next 如何将native侧unsigned char 数组,传到ArkTs侧
HarmonyOS 鸿蒙Next 如何将native侧unsigned char 数组,传到ArkTs侧
我的unsigned char数组size是32
通过napi_create_string_utf8(env, data, len, &result)传到ArkTs的string str
发现str的length可能会是16,17或者18
而在native侧通过
```python
napi_get_value_string_utf8读取这个str,发现读取出来的str_len可能是32,33,34。。
有大佬来解释一下吗?
Index.ets
index.d.ts
hello.cpp
输出
更多关于HarmonyOS 鸿蒙Next 如何将native侧unsigned char 数组,传到ArkTs侧的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
rand()会返回一个从0到最大随机数的任意整数,有些会超出char存储的大小范围,可以使用rand()%128,这样就不会出现上述问题了。
更多关于HarmonyOS 鸿蒙Next 如何将native侧unsigned char 数组,传到ArkTs侧的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
请问这个问题后来有解了吗,我现在碰到了相同的问题,跟这个场景一致,加解密函数的调用
把运算结果 做Base64编码,然后再放入UTF-8字符串中返回。
开发者您好,该问题已反馈至相关人员,请耐心等待。
在HarmonyOS鸿蒙Next中,将native侧的unsigned char
数组传递到ArkTS侧,可以通过以下步骤实现:
-
Native侧定义接口:在Native侧定义一个接口,使用
napi_value
和napi_env
来处理数据传递。例如:napi_value GetUnsignedCharArray(napi_env env, napi_callback_info info) { unsigned char data[] = {0x01, 0x02, 0x03, 0x04}; size_t length = sizeof(data) / sizeof(data[0]); napi_value array; napi_create_array_with_length(env, length, &array); for (size_t i = 0; i < length; i++) { napi_value element; napi_create_uint32(env, data[i], &element); napi_set_element(env, array, i, element); } return array; }
-
注册Native模块:在Native侧注册该接口,使其可以在ArkTS侧调用。例如:
napi_value Init(napi_env env, napi_value exports) { napi_property_descriptor desc = {"getUnsignedCharArray", 0, GetUnsignedCharArray, 0, 0, 0, napi_default, 0}; napi_define_properties(env, exports, 1, &desc); return exports; } NAPI_MODULE(NativeModule, Init)
-
ArkTS侧调用:在ArkTS侧通过
import
引入Native模块,并调用该接口获取unsigned char
数组。例如:import nativeModule from 'libNativeModule.so'; let unsignedCharArray = nativeModule.getUnsignedCharArray(); console.log(unsignedCharArray); // 输出: [1, 2, 3, 4]
通过以上步骤,可以将Native侧的unsigned char
数组传递到ArkTS侧。
在HarmonyOS鸿蒙Next中,将native侧的unsigned char
数组传递到ArkTS侧可以通过以下步骤实现:
-
Native侧:在Native代码中,将
unsigned char
数组转换为napi_value
类型。可以使用napi_create_arraybuffer
或napi_create_typedarray
函数来创建ArrayBuffer或TypedArray。 -
ArkTS侧:在ArkTS中,接收Native传递的ArrayBuffer或TypedArray,并根据需要使用
DataView
或TypedArray
进行操作。
例如,Native代码:
napi_value arrayBuffer;
napi_create_arraybuffer(env, size, (void**)&data, &arrayBuffer);
ArkTS代码:
let buffer: ArrayBuffer = ...; // 接收到的ArrayBuffer
let view = new Uint8Array(buffer); // 转换为Uint8Array进行操作
通过这种方式,可以在Native和ArkTS之间高效传递二进制数据。