Java - JNI - 将 UCS-2 字符转换为 jchar(即 Java 的字符)

Java - JNI - Casting UCS-2 character to jchar (i.e Java's char)

我想将 "wide" 个字符的数组从本机 C++ 代码传输到 Java 代码。为此,我有一个本地实现的 Java 方法:

public native char[] getRawText();

在 C++ 中,我有一个 uchar16_t 的连续缓冲区(实际上是 2 个字节宽的无符号整数)。我想将该缓冲区的内容复制到要返回的 Java 字符数组中。

执行以下操作是否安全:

// 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;

如果您尝试将字符串 return 转换为 java,请查看 JNI 函数 NewStringUTF(),它采用 C 字符串并且 return 是 java 字符串

NewStringUTF