napi读取js字符串对象, 赋值给c++对象之后会出现乱码或者为空,以及如何通过读取字符串长度?

1、napi读取js字符串对象, 赋值给c++ 对象之后会出现乱码或者为空的问题. 是否由编译优化设置导致?使用napi_get_value_string_utf8,想获取字符串长度,不想通过循环判断读取整个字符串长度,不知道有什么办法。同时napi读取js字符串对象, 赋值给c++对象之后会出现乱码或者为空的问题,不确认是否由编译优化设置导致。

2、napi_get_value_string_utf8 只能读取已知长度字符串, 只能通过循环判断读取整个字符串长度?

HarmonyOS
2024-04-28 22:51:11
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
janux

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[0] = {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); // 获取字符串 
... 
}

2.另,在char* 转string的过程中有可能出现类型转换耗时的问题,导致乱码的出现,把util_get_object_string_property_value()和util_get_object_string_property_value()的返回值都设成char*可以解决问题。

分享
微博
QQ
微信
回复
2024-04-29 15:32:45
相关问题
如何对象转为JSON字符串
599浏览 • 1回复 待解决
如何打印JSON对象和JSON字符串
407浏览 • 1回复 待解决
如何将JSON字符串转Class对象
489浏览 • 1回复 待解决
HarmonyOS Hilog日志字符串长度限制
455浏览 • 1回复 待解决
判断字符串是否和空白符
1545浏览 • 1回复 待解决
检查字符串是否以给定的字符串开头
551浏览 • 1回复 待解决
HarmonyOS将对象转换成字符串的方法
613浏览 • 1回复 待解决
转换整个字符串字符小写
361浏览 • 1回复 待解决
如何将JSON字符串转Class对象数组?
502浏览 • 1回复 待解决
HarmonyOS 瀑布流布局获取字符串高度
74浏览 • 1回复 待解决