1

我想从我的 jni 方法返回无符号字符 []。我在 Jni 函数中有以下代码:

unsigned char abc[16]
 abc[i] = 'b';

我使用 jstring 和 jcharArray 将 abc 返回到 java 代码。但是在使用 jstring 时,我无法正确编译程序。anb 在使用 chararray 时我得到了一些奇怪的字符。请提出一些解决方案如何处理这个问题。

4

2 回答 2

4

unsigned char实际上,对应于 C 的 Java 数据类型是byte. 您需要将您的方法声明为byte[]在 Java 端返回,并在 C 端采取相应的行动。

这是否是正确的做法是另一个问题。在 C 中,“文本字符串”和“字节数组”几乎是同义词(模空终止);在Java中,不是这样。这是一串可读 (ASCII) 文本吗?如果是,则更自然地将其返回为jstring; 要将 C 转换[unsigned] char *为 a jstring,请使用JNIEnv::NewStringUTF(). 但是还有另一个警告:如果您的字符串位于 UTF-8 以外的代码页中并且包含非 ASCII 字符(代码 >= 0x80),则此方法不起作用;那么你最好将字符串作为字节数组传递出去,并通过 Java 端的正确代码页进行转换。

于 2013-03-12T19:20:59.337 回答
0

在我用 C++ 完成所有工作之后,我将数据从常规的本机字节数组(实际上是unsigned char *dataB)复制到一个新的 JNI 对象jbyteArray(同样的东西,但对于 JNI),它可以返回给 Java 代码:

...
//Prepare jbyteArray to return to Java
jbyteArray resultReturn = env->NewByteArray(dataLength);
//copy data:
env->SetByteArrayRegion(resultReturn, 0, dataLength, reinterpret_cast<const jbyte *>(dataB));

    return resultReturn;
}  

其中 dataB 是一个字节数组,unsigned char *dataB其中包含我使用的所有数据。

于 2019-06-13T10:07:25.770 回答