HarmonyOS 鸿蒙Next napi_create_string_utf8 只接收char*,数据中如果有结束符,会被截断
HarmonyOS 鸿蒙Next napi_create_string_utf8 只接收char*,数据中如果有结束符,会被截断
通过NAPI与C++ so库进行交互,C++返回二进制文件内容,由于二进制文件中会包含结束符("\0"),如果采用char接收(用std::string则没问题),数据会被截断,而NAPI数值转换函数napi_create_string_utf8
只接收const char数据,当然二进制内容可以进行base64加密以去除结束符,但加密后,再解密,调用量大就会影响效率,所以不考虑这种方式。
请问有没有办法接收到string类型。
您好,请您通过在线提单进一步解决:https://developer.huawei.com/consumer/cn/support/feedback/#/,感谢您的反馈和支持。
更多关于HarmonyOS 鸿蒙Next napi_create_string_utf8 只接收char*,数据中如果有结束符,会被截断的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,napi_create_string_utf8
函数用于将C/C++中的UTF-8字符串转换为JavaScript中的字符串。该函数接受一个char*
类型的参数,表示UTF-8编码的字符串。如果传入的字符串中包含\0
(空字符,即字符串结束符),则该函数会将其视为字符串的结束标志,从而截断后续内容。
具体来说,napi_create_string_utf8
的函数签名如下:
napi_status napi_create_string_utf8(napi_env env,
const char* str,
size_t length,
napi_value* result);
其中,str
参数是指向UTF-8字符串的指针,length
参数表示字符串的长度。如果length
参数设置为NAPI_AUTO_LENGTH
,则函数会认为字符串以\0
结尾,并自动计算字符串长度。因此,如果字符串中包含\0
,函数会将其视为字符串的结束符,导致后续内容被截断。
如果你的数据中包含\0
且不希望被截断,可以在调用napi_create_string_utf8
时显式指定length
参数,确保函数正确处理整个字符串数据。