如何在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);
回答:
相信您会使用GetByteArrayElements
和ReleaseByteArrayElements
。就像是:
boolean isCopy;jbyte* b = GetByteArrayElements(env, arr, &isCopy);
你应该能够投b
给char*
在这一点上,以访问数组中的数据。请注意,这可能会创建数据的副本,因此您需要确保使用释放内存ReleaseByteArrayElements
:
ReleaseByteArrayElements(env, arr, b, 0);
最后一个参数是指示b
应如何处理对更改的模式。0
表示将值复制回arr
。如果您不想将数据复制回arr
,请JNI_ABORT
改用。
有关更多详细信息,请参见《JNI参考》。
以上是 如何在jni中将jbyteArray转换为本地char *? 的全部内容, 来源链接: utcz.com/qa/430051.html