我正在尝试使用JNA中的C函数:
C:
int addHoliday(unsigned char* data);
JAVA:
int addHoliday(byte[] data);
我正在传递带有信息的byte [],但是在C中我使用相同的指针来编写响应。我可以用新信息捕获相同的byte []吗?
答案 0 :(得分:1)
将其作为字节指针数组:
int addHoliday(byte* data);
答案 1 :(得分:1)
是的,当在直接函数调用中使用时,原始数组就像内存缓冲区一样工作。本机代码将在本机调用期间看到一致的缓冲区,并且您的Java代码将在byte[]
中看到本机代码写入的任何数据。
对于数据的签名,具有高位设置的任何unsigned char
元素将在Java中的byte[]
中显示为负值。要正确提取数据,您需要屏蔽更高的位,例如
int unsigned_value = (int)byte_value & 0xFF;