如何在Android中将Little Endian hex转换为int / long / string?

时间:2016-05-29 07:44:48

标签: java android

我有一个通过串口获取数据的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)

在有效负载长度和校验和字节之间,我想解析数据。

您可以在此图片上看到有效负载内容: enter image description here

I4和U4表示: enter image description here enter image description here

这是解析数据:

enter image description here

1 个答案:

答案 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

<强>资源

Edianness

Java Hex

Java & Endian Java Integer是Big Endian。