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

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

本文关键字:Java char jchar 转换 JNI UCS-2 字符      更新时间:2023-10-16

我想将一个"wide"字符数组从本地c++代码转移到Java代码。为此,我有一个本地实现的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 * ?

字符数组大部分时间大约有2000个字符长,所以我希望避免无用的复制。

我省略了异常检查以保持代码简单。

谢谢。

jchar在jhi.h中定义为:

typedef unsigned short     jchar;

如果你试图返回一个字符串到java,看一下JNI函数NewStringUTF(),它接受一个C字符串并返回一个java字符串

NewStringUTF