我的 DLL 中有一个 C++ 函数需要一个 uint8_t 数组作为输入参数,所以该数组看起来像这样:
uint8_t input[input_length] = { 0x30, 0x41, 0x80, 0x8A...};
我想在 Java 中通过 JNA 使用此函数,这意味着我必须在 Java 中创建一个 uint8_t 数组。我的第一种方法是创建一个字节数组,例如:
byte[] input = { 0x30, 0x41, 0x80, 0x8A...};
但后来我意识到 C++ 中的 uint8_t 变量的范围是 0..255,而 Java 中的 byte 变量的范围是 -128..127,正如您所看到的,这个数组包含超过的值127(如 0x8A),这意味着我在这里的 Java 声明无效。所以我的问题是 Java 中什么类型等同于 uint8_t?
最佳答案
Java 没有无符号类型。但这不是什么大问题,因为 Java 中的有符号溢出被定义为二进制补码,您只需将 byte
传递给 JNA 期望的 uint8_t
即可。只是使用起来有点不方便:
byte[] input = { 0x30, 0x41, (byte)0x80, (byte)0x8A...};
要读回 uint8_t
,您需要执行 (x & 0xFF)
来去除符号扩展并将结果作为 int
.
关于java - 如何在 Java 中声明一个 uint8_t 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54442269/