gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:48:48 25 4
gpt4 key购买 nike

我想将“宽”字符数组从 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 字符串

NewStringUTF

关于Java - JNI - 将 UCS-2 字符转换为 jchar(即 Java 的 char),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33143741/

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