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

我正在尝试在jni中将jbyteArray转换为本地c字符串(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参考》。

以上是 如何在jni中将jbyteArray转换为本地char *? 的全部内容, 来源链接: utcz.com/qa/430051.html

回到顶部