2013-05-01 3 views
1

장치에서 보낸 이진 데이터를 해독하고 읽으려고하는데 이진 구조 안에있는 10 진수를 추출해야합니다. 자바를 사용하여 주어진 이진 구조체를 읽는 방법?

  • UnitID는 장치 식별하는 메시지 시퀀스 번호

    (2) 동기 메시지 포맷 타입 정의 구조체

    { 
        WORD 
        SyncHeader; 
        WORD 
        SyncID; 
        DWORD UnitID; 
    } SyncStruct; 
    
    • SyncHeader 항상 0xf8fa
    • SyncID 이다 된다 이 구조의 세부 사항이다 번호

    예컨대, 수신 된 메시지는

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

    • SyncHeader = 0xF8 0xFA
    • SyncID =하는 0x01 0x1B (10 진 = 283)
    • UnitID = 0x3C 0x33을 0x60으로는 0x81 (10 진 = 1,010,000,001)

    구조가 잘 정의되어 있으므로 다른 구조를 읽지 만 동일한 원리를 구현하는 작은 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; 
    } 
    

    10 진수 값인 SyncID 메시지 시퀀스 번호 만 변수에 읽고 저장하려면 내 작은 Java 코드에 어떤 수정을해야합니까?

    감사

  • 답변

    1

    많이 감사를 바이트 배열에 바이트를 넣고 또한 단지

    ByteBuffer bb = ByteBuffer.wrap(byteArray); 
        int syncId = bb.getShort(2); 
    
    +0

    그레이트 syncId 읽을 수 있습니다 그것은

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

    에서 숫자를 읽을의 ByteBuffer를 사용 , 그것은 일했다!! –

    관련 문제