我想将“宽”字符数组从 native C++ 代码传输到 Java 代码。为此,我有一个 native 实现的 Java 方法:
public native char[] getRawText();
在 C++ 中,我有一个连续的 uchar16_t 缓冲区(实际上是 2 个字节宽的无符号整数)。我想将该缓冲区的内容复制到要返回的 Java char 数组中。
执行以下操作是否安全:
// Buffer of uchar16_t characters (UCS-2 encoded unicode).
const uchar16_t * const wsRawText = /* Get it from native code */
// Length of that buffer
const uint32_t nLength = /* Same */
// Allocate the Java char array to be returned.
jcharArray pCharArray = pEnv->NewCharArray( nLength );
// Set the array elements, casting const uchar16_t * to const jchar *
pEnv->SetCharArrayRegion( pCharArray, 0, nLength, wsRawText );
return pCharArray;
可以将 const uchar16_t * 转换为 const jchar * 吗?
大多数情况下,char 数组的长度约为 2000 个字符,因此我想避免无用的拷贝。
我省略了异常检查以保持代码简单。
谢谢。
最佳答案
jchar 在 jhi.h 中定义为:
typedef unsigned short jchar;
如果您尝试将字符串返回给 java,请查看 JNI 函数 NewStringUTF(),它采用 C 字符串并返回 java 字符串
关于Java - JNI - 将 UCS-2 字符转换为 jchar(即 Java 的 char),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33143741/