在Native侧如何精准获取ArkTS侧传入的字符串长度

在Native侧,转换ArkTS侧的字符串到char[]数组时无法准确获取字符串长度,频繁使用NAPI_AUTO_LENGTH宏定义会增加内存开销,影响性能。

HarmonyOS
2024-03-19 16:08:13
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
人间冰美式

可以使用napi_get_value_string_utf8的第五个参数来获取ArkTS层传入字符串的长度。这个参数是一个指向size_t类型的变量,它会在函数调用成功后被赋值为字符串的长度,可以根据这个长度来分配合适大小的char数组。具体操作为:先调用napi_get_value_string_utf8函数来获取字符串的长度,然后根据长度分配char数组的内存空间。最后,再次调用napi_get_value_string_utf8函数来获取字符串的内容。注意,在分配内存时,可以将长度+1,以便为字符串添加终止符'\0'。

参考代码如下:

static napi_value TestFunc(napi_env env, napi_callback_info info) 
{ 
    size_t argc = 1; 
    napi_value args[1] = {nullptr}; 
    napi_get_cb_info(env, info, &argc, args , nullptr, nullptr); 
     
    size_t len = 0; 
    napi_get_value_string_utf8(env, args[0], nullptr, 0, &len);    // 获取字符串长度到len 
    char* buf = new char[len+1];                                   // 分配合适大小的char数组 
    napi_get_value_string_utf8(env, args[0], buf, len + 1, &len);  // 获取字符串 
    // ... 
}
分享
微博
QQ
微信
回复
2024-03-19 23:38:56
相关问题
arktshashmap转为native
961浏览 • 1回复 待解决
Native释放ArkTS对象方法
491浏览 • 1回复 待解决
Native调用ArkTS全局普通方法
919浏览 • 1回复 待解决
ArkTSNative如何进行map数据交互
2246浏览 • 1回复 待解决
HarmonyOS Hilog日志字符串长度限制
416浏览 • 1回复 待解决
ArkTSNative分别如何动态加载SO库
2479浏览 • 1回复 待解决
如何Native释放ArkTS对象
2352浏览 • 1回复 待解决
nativelog获取不到
1631浏览 • 1回复 待解决
Native调用ArkTS类函数
966浏览 • 1回复 待解决
Native如何获取可操作文件目录
2053浏览 • 1回复 待解决
如何Native获取APP版本信息
2309浏览 • 1回复 待解决
ArkTS如何实现字符串编解码
2804浏览 • 1回复 待解决
Native进行跨模块加载
820浏览 • 1回复 待解决
TS如何批量传递函数到native
988浏览 • 1回复 待解决