1

我正在尝试解码和读取从设备发送的二进制数据,我需要提取二进制结构内的十进制数。这是结构细节:

(2) 同步消息格式 typedef struct

{
    WORD
    SyncHeader;
    WORD 
    SyncID;
    DWORD UnitID;
} SyncStruct;
  • SyncHeader 始终为 0xf8fa
  • SyncID 是消息序列号
  • UnitID 是单位标识号

例如,收到的消息是

0xFA 0xF8 0x1B 0x01 0x81 0x60 0x33 0x3C

  • 同步头 = 0xF8 0xFA
  • SyncID = 0x01 0x1B(十进制 = 283)
  • UnitID = 0x3C 0x33 0x60 0x81(十进制 = 1010000001)

现在,结构定义良好,我有一个小的 java 代码,它读取不同的结构但实现相同的原理:

private String getId(ChannelBuffer buf) {

    String id = "";
    for (int i = 0; i < 7; i++) {
        int b = buf.getUnsignedByte(i);

        // First digit
        int d1 = (b & 0xf0) >> 4;
        if (d1 == 0xf) break;
        id += d1;

        // Second digit
        int d2 = (b & 0x0f);
        if (d2 == 0xf) break;
        id += d2;
    }

    return id;
}

我必须对我的小型 Java 代码进行哪些修改才能仅读取 SyncID 消息序列号并将其存储在变量中,该序列号是十进制值?

谢谢

4

1 回答 1

1

将字节放入字节数组并使用 ByteBuffer 从中读取数字

    ByteBuffer bb = ByteBuffer.wrap(byteArray);
    int syncHeader =  bb.getShort();
    int syncId =  bb.getShort();
    int unitId = bb.getInt();

也可以只读取syncId

    ByteBuffer bb = ByteBuffer.wrap(byteArray);
    int syncId =  bb.getShort(2);
于 2013-05-01T05:50:20.040 回答