2

我正在使用 usb4java 读取 USB 键盘(二维码扫描仪)输入。

我的代码片段如下所示:

byte[] data = new byte[16];
UsbPipe usbPipe = usbEndpoint.getUsbPipe();
if (usbPipe != null) {
    if (!usbPipe.isOpen()) {
        usbPipe.open();
    }
    if (usbPipe.isOpen()) {
        UsbIrp usbIrp = usbPipe.createUsbIrp();
        usbIrp.setData(data);

我有两个问题:

1] 按 A 时,字节数组数据为 2,0,0,0,0,0,0,0,2,0,4,0,0,0,0,0
按 AB 时,字节数组数据为 2 ,0,0,0,0,0,0,0,2,0,4,0,0,0,0,0,2,0,5,0,0,0,0,0

如何在java中将其转换为字符?即转换后得到A或AB。

2] 目前,我在上面的代码片段中传递固定大小的字节数组。例如,如果我期望 1 个字符,我将 16 作为字节数组的大小传递,2 个字符 24 作为大小等等。有没有其他优雅的解决方案可以让它变得动态?

PS:我的字节数组转换器片段:

StringBuffer sb = new StringBuffer();
for (byte b : data) {
    sb.append(b);
    sb.append(",");
}
String byteString = sb.toString();
return byteString;

谢谢你的帮助

编辑 1:这里的完整源代码:http: //tpcg.io/zt3WfM

4

1 回答 1

3

根据文档,格式应为:

22 00 04 00 00 00 00 00
Offset  Size    Description
0       Byte    Modifier keys status.
1       Byte    Reserved field.
2       Byte    Keypress #1.
3       Byte    Keypress #2.
4       Byte    Keypress #3.
5       Byte    Keypress #4.
6       Byte    Keypress #5.
7       Byte    Keypress #6. 

基于ASCII码

// 'A' is 0x65
byte codeA = 0x04;     // The code for A key
cahr a = 0x61 + codeA ;
byte codeX = 0x1B;     // The code for X key
char x = 0x61 + code; // x == 'X'

System.out.println(a);
System.out.println(x);

或者您可以使用 Map(0x04, 'A')

于 2019-05-02T15:19:52.930 回答