如何在jni中将jbyteArray转换为本机char *?

我想在jni中将jbyteArray转换为native c string(char *)? 不幸的是我找不到任何关于如何做到这一点的文档。 我在c代码中使用以下原型调用java函数。

public static byte[] processFile(byte[] p_fileContent) 

在c代码中,我正在调用此函数,该函数返回一个字节数组。 该字节数组的内容是一个java字符串。 但我需要将其转换为ac字符串。

 jbyteArray arr = (jbyteArray) env->CallObjectMethod(clsH, midMain, jb); printf("%s\n", (char*) arr); 

我相信你会使用GetByteArrayElementsReleaseByteArrayElements 。 就像是:

 boolean isCopy; jbyte* b = GetByteArrayElements(env, arr, &isCopy); 

此时,您应该能够将bchar* ,以便访问数组中的数据。 请注意,这可能会创建数据的副本,因此您需要确保使用ReleaseByteArrayElements释放内存:

 ReleaseByteArrayElements(env, arr, b, 0); 

最后一个参数是一个模式,指示应如何处理对b更改。 0表示将值复制回arr 。 如果您不想将数据复制回arr ,请改用JNI_ABORT

有关更多详细信息,请参阅JNI参考 。