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

标签 java c++ arrays casting java-native-interface

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

相关文章:

使用 "libstudxml"库的 C++ 代码无法编译或链接

不同类型 vector 上的 C++ 相同函数

javascript - 如何在 JavaScript 中迭代行

Android反向播放pcm文件

java - Java 中的并发 HTTP URL 连接

java - 如何修复 org. Threeten.bp.LocalDateTime 的 ClassNotFoundException?

java - JPA @Query 与类似实体的参数

c++ - 你能处理 C++ 中的编译时错误吗?

php - 如何从 php 中的值数组中对特定字符串进行排序?

java - Layz 加载列表在与 EntityManager 分离时重置