gpt4 book ai didi

在 JNI 中将 jchararray 转换为 jstring

转载 作者:行者123 更新时间:2023-11-30 19:05:11 24 4
gpt4 key购买 nike

我正在使用下面的 JNI 代码将 jchararray 转换为 jstring,但我在 Linux 中只获得第一个字符。

 char *carr =(char*)malloc(length+1);
(*env)->GetCharArrayRegion(env, ch, 0, length, carr);
return (*env)->NewStringUTF(env, carr);

最佳答案

GetCharArrayRegion 返回 Java 字符,即 UTF-16 代码点。 JNI 中的 jchar ,它们不是以 null 结尾的,并且您不能使用 NewStringUTF ,它需要一个以 null 结尾的字符串,其中包含修改后的 UTF-8 编码中的字节。

首先,分配正确的内存量

jchar *carr = malloc(length * sizeof(jchar));

然后执行GetCharArrayRegion

(*env)->GetCharArrayRegion(env, ch, 0, length, carr);

然后请注意,您有一个 UTF-16 字符数组。如果第一个字符属于 ASCII 范围,并且体系结构是小端字节序,则预计您只会“获取第一个字符”,因为第一个 的 MSB 字节 jchar 将为零,并且 NewStringUTF会认为这是终结者。使用NewString相反:

return (*env)NewString(env, carr, length);

关于在 JNI 中将 jchararray 转换为 jstring,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50431970/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com