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

2022-09-03 01:23:56

我正在尝试在jni中将jbyteArray转换为本机c字符串(char *)?不幸的是,我找不到任何关于如何做到这一点的文档。我在c代码中使用以下原型调用Java函数。

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

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

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

答案 1

我相信你会使用和.像这样:GetByteArrayElementsReleaseByteArrayElements

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

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

ReleaseByteArrayElements(env, arr, b, 0);

最后一个参数是指示应如何处理更改的模式。 表示值被复制回 。如果不想将数据复制回 ,请改用。b0arrarrJNI_ABORT

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


答案 2

推荐