我正在用usb4java编写Java代码,用于与使用控制传输(Windows)通过USB连接的测量仪器进行通信 . 使用填充了设备预期的十六进制值的ByteBuffer传输数据 .
这是相关的代码片段:
byte[] query = new byte[]{ 0x1d, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 };
ByteBuffer buffer = ByteBuffer.allocateDirect(8);
buffer.put(query);
buffer.rewind();
int transferred = LibUsb.controlTransfer(handle, (byte)0x21, (byte)0x1, (short)0, (short)0, buffer, 1000);
代码工作正常,但只要缓冲区中的任何值超过0x7F(127),就会传递错误的数字,并且设备无法正常响应 .
我显然达到了Java中使用的有符号字节类型的限制 . 但有没有办法解决它并获得设备的正确 Value ?
几天这些都非常艰难,正当问题似乎得到解决时,我打破了字节大小限制 . 在此先感谢您的任何建议!
2 回答
尝试将-1放在数组中,因为当您使用带符号的8位类型时,应将其表示为11111111 . 你可能会把它写成
0xFF - 256
以明确你的意图 .如果这不起作用,你能详细说明你的意思是“通过了错误的号码”吗?
不确定我是否理解你,但以下应该正常工作:
如您所见,您必须将
0x7F
以上的值显式转换为byte
,但这不会更改位模式 . 该值将被截断为8位 . 另一个例子:由于值
0xFF
被显式地转换为byte
,因此在增量之后变为0x00
,如预期的那样 .