con*_*yyy 4 c++ java type-conversion jna
我的DLL中有一个C++函数需要一个uint8_t数组作为输入参数,所以数组看起来像这样:
uint8_t input[input_length] = { 0x30, 0x41, 0x80, 0x8A...};
Run Code Online (Sandbox Code Playgroud)
我想在Java中使用这个函数与JNA,这意味着我必须在Java中创建一个uint8_t数组.我的第一种方法是创建一个字节数组,如:
byte[] input = { 0x30, 0x41, 0x80, 0x8A...};
Run Code Online (Sandbox Code Playgroud)
但后来我意识到,C++中的uint8_t变量的范围是0..255,但是Java中的一个字节变量的范围是-128..127,正如您所看到的,这个数组包含超过127的值(如0x8A),这意味着我的Java声明无效.所以我的问题是Java中的哪种类型等同于uint8_t?
Java没有无符号类型.但这不是一个大问题,因为Java中的签名溢出被定义为两个补码,你可以将它传递byte给JNA期望的地方uint8_t.使用它只是有点不方便:
byte[] input = { 0x30, 0x41, (byte)0x80, (byte)0x8A...};
Run Code Online (Sandbox Code Playgroud)
要uint8_t回头,你要(x & 0xFF)删除符号扩展名并将结果作为一个int.
| 归档时间: |
|
| 查看次数: |
407 次 |
| 最近记录: |