我有一个android应用程序,它通过串口获取数据。
例如,我得到了这个字节数组:
E8 FC 3E 0E 9C电子束编辑0A 71 67 28 1C 28 28 02 0075 8C 00 91 6A 00 4A 7C 00
我从一个设备中得到了这个,在这个设备的文档中,我看到了以下内容:
所有多字节值都是以小Endian格式排列的。
ByteOffset: 0-4及其无符号长
ByteOffset: 4-8签署
ByteOffset: 8-12签署long
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 00 00 00 a 00 00 00 28 00 00 00 AA 64 FE 00 00 EC 8A
头的头两个字节(B5 62)
秒2字节类和id (01 12)
在两个字节之后,有效载荷长度(2400)
最后两个字节是校验和(EC 8A)
在有效负载长度和校验和字节之间,我希望解析数据。
您可以在这张图片上看到有效载荷内容:

I4和U4的意思是:


下面是分析过的数据:

发布于 2016-05-29 08:56:03
看上去是个不错的谜题。但我觉得我帮不了你多少。天哪。
当我把你的名单,它看起来像十六进制,而不是再见;
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:Converting Little Endian to Big Endian
资源
Java & Endian Java是大端。
https://stackoverflow.com/questions/37507445
复制相似问题