java - 如何在 Java 中声明一个 uint8_t 数组

标签 java c++ type-conversion jna

我的 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/

相关文章:

Java:在这种特殊情况下如何处理ConcurrentModificationException?

java - 随机数生成和生成数的排除

java - 如何更改从文件加载的 BufferedImage 的图像类型?

javascript - 将字符串转换为对象时获取语法错误意外标记非法

c# - 对象作为接口(interface)

java - 在 Java 中使用 Collectors 从两个 hashmaps 中返回一个平均 double

java - jsp页面使用指纹登录认证

c++ - 是否可以在运行时切换到不同的基类构造函数?

c++ - 如何从文件中将名称插入二维字符数组

c++ - 调用函数时出现段错误