当前位置: 首页 > 面试题库 >

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

章心水
2023-03-14
问题内容

我正在尝试在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参考》。



 类似资料:
  • 我正在开发一个使用C/C++代码的Android库。 我显然有某种编码错误,只在运行时出错。 错误: 如果我正确理解,那么我应该能够将返回值强制转换为,然后能够将其分配给我的一个java类中的。然而,事实并非如此。 您将注意到,可以将强制转换为,因为我将其作为参数传入。通过执行c代码,我可以确认这是真的。 将转换/强制转换为的正确方法是什么?

  • 我有C/C++源代码(在Windows上运行良好)将输入帧转换为新帧。 > 将byte[]帧从Java转换为JNI jarrayByte 将jarrayByte转换为Jyte* 从JByte*创建新的cv::mat原始代码* } 我的Java代码:

  • 问题内容: 我已经通过使用JNI 将URL字符串从Java传递为C代码作为数据类型。我的库方法需要一个as url。 我如何转换的? PS:在C中使用jcharArray有什么优势吗?(即在本地方法中传递而不是字符串) 问题答案: 这是我开始使用JNI时发现的几个有用的链接 http://en.wikipedia.org/wiki/Java_Native_Interface http://down

  • 我想比较两个jbyteArray如果在JNI中相等的话。有没有像“strcmp”这样的方法?

  • 如何正确转换dto到json在Java?我这样做就像下面使用: 问题在于格式化字段。在Dto我有我的日期在这种格式:但转换此dto到json字节后,我看到我的拆分为对象与许多属性如下: 在使用之后,我希望将中的所有属性以与转换之前相同的格式进行转换。如何做到这一点? 谢谢你的帮助!

  • 问题内容: 如何将UTC时间转换为 当地时间 ? 我已经为我需要当地时间的所有国家/地区创建了具有UTC时差的地图。然后,我将该差异作为持续时间添加到当前时间(UTC),并打印结果希望是该特定国家/地区的当地时间。 由于某些原因,结果是错误的。例如,在匈牙利,相差一小时。知道为什么我得到的结果不正确吗? 问题答案: 请记住,操场的时间设置为,因此它正在工作。 正确的方法是使用,这是一个示例: