我有一个通过串口获取数据的android应用程序。
例如,我得到了这个字节数组:
E8 FC 3E 0E 9C EB ED 0A 71 67 28 1C 28 28 02 00 75 8C 01 00 91 6A 00 00 4A 7C 00 00
我是从设备上得到的,在设备的这个文档中我看到了:
所有多字节值都以Little Endian格式排序
ByteOffset:0 - 4及其无符号长
ByteOffset:4 - 8签名长
ByteOffset:8 - 12签名长
ByteOffset:12 - 16签下长 等
我的问题是我无法将其转换为有效的int或long。
我试过这些转换:
int val = (bytes[3] << (Byte.SIZE * 3));
val |= (bytes[2] & 0xFF) << (Byte.SIZE * 2);
val |= (bytes[1] & 0xFF) << (Byte.SIZE * 1);
val |= (bytes[0] & 0xFF);
long val = 0;
val += new Byte(bytes[3]).intValue();
val += new Byte(bytes[2]).intValue();
val += new Byte(bytes[1]).intValue();
val += new Byte(bytes[0]).intValue();
int val = java.nio.ByteBuffer.wrap(bytes).order(java.nio.ByteOrder.LITTLE_ENDIAN).getInt();
我应该如何解析我的字节数组?
更新: 示例输入字节数组:
B5 62 01 12 24 00 C0 C3 E3 01 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 AA 64 FE 00 EC 8A
标题的前2个字节(B5 62)
秒2字节的类和id(01 12)
2字节后有效载荷长度(24 00)
校验和的最后2个字节(EC 8A)
在有效负载长度和校验和字节之间,我想解析数据。
这是解析数据:
答案 0 :(得分:0)
看起来很棒的拼图。但我认为我不能帮助你。唉。
当我列入你的列表时,它看起来像Hex,而不是byes;
int [] hexes = {0xB5, 0x62, 0x01, 0x12, 0x24, 0x00, 0xC0, 0xC3, 0xE3, 0x01, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0xAA, 0x64, 0xFE, 0x00, 0xEC, 0x8A};
Google-fu:Converting Little Endian to Big Endian
<强>资源强>:
Java & Endian Java Integer是Big Endian。