2013-05-01 33 views
1

我想解碼並讀取從設備發送的二進制數據,我需要提取二進制結構內的十進制數字。 是這種結構細節:如何使用java讀取給定的二進制結構?

(2)同步消息格式 typedef結構

{ 
    WORD 
    SyncHeader; 
    WORD 
    SyncID; 
    DWORD UnitID; 
} SyncStruct; 
  • SyncHeader總是0xf8fa
  • SyncID被一個消息序列號
  • 單元ID是單元標識號碼

For例如,接收的消息是

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

  • SyncHeader = 0xF8的0xFA迴應
  • SyncID = 0×01 0x1B(十進制= 283)
  • 的UnitID =爲0x3C 0x33 0x60的0×81(十進制= 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消息序列號,該序號是十進制值?

感謝

回答

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); 
+0

大閱讀閱讀的數字,非常感謝, 有效!! – 2013-05-01 16:05:30