2014-11-01 5 views
1

MQTT 라이브러리를 구현하려고합니다. 그리고 튜토리얼에 따르면 MQTT 메시지의 고정 헤더는 게시 된 그림에 표시된 것과 같아야합니다. MQTT 고정 헤더 구조에 관해서?

또한 동일한 튜토리얼 저는 고정 헤더의 encodeing 방법이 기록되어 있음을 발견 :

mqtt.write((byte) ((retain ? 1 : 0) | qos << 1 | (dup ? 1 : 0) << 3 | type << 4)); 

질문하고, 전기, 상기 고정 헤더 규격에 따른 필드 retain, qos, dupmsg type은 각각 1, 2, 14 비트가되어야합니다. msg type 필드는 5 비트 "< < 4"및 필드 dup 개까지 팽창하는 이유는

4 bits "< < 3"개까지 확장? Fixed_Header

MSG 타입 필드는 5 비트 "< < 4"및 필드 DUP 개까지 확대되는 이유 enter image description here

답변

3

4 비트 "< < 3"개까지 확장?

<<

필드를 "확장"하지 않습니다, 그것은 이동은 왼쪽.

처음에, 우리의 각 숫자는 다음과 같습니다

bit: | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 
====================================================================== 
            |------------- type ------------| 
                  |- dup -| 
                |----- qos -----| 
                  | retain| 

각각의 숫자는 해당 필드의 유효 범위에 있다고 가정 할 때, 그들은 이미 올바른 폭이다. 특히 type은 0에서 15까지의 값을 가질 수 있으므로 최대 4 비트까지 가능합니다. dupretain은 0 또는 1이어야하므로 1 비트 너비입니다. qos은 2 비트 폭 인 0에서 3 사이의 값을 가질 수 있습니다.

하지만 잘못된 위치에 있습니다. 그들은 낮은 비트 (3,2,1,0)에 고정되어 있습니다. 우리는 그들이 올바른 위치에 그들을 얻을 왼쪽으로 이동해야합니다 예를 들어

bit: | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 
====================================================================== 
    |----------- type<<4 -----------|         
            | dup<<3|       
              |---- qos<<1 ---|   
                  | retain| 

dup 왼쪽 3 비트 이동합니다 우리가 3 개 공간 아래에 (0 값의 실제 비트)를 원하기 때문에. retain은 이미 올바른 위치에 있기 때문에 이동하지 않아도됩니다.

모든 비트가 올바른 위치에 일단, 그들이 함께이 바이트를 제공하기 위해 |를 사용하여 ORed 있습니다

bit: | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 
====================================================================== 
    |----------- type<<4 -----------| dup<<3|---- qos<<1 ---| retain| 

어떤 수배 것입니다.

+0

참으로 가장 명확한 설명 ..chapeaux – user2121

+0

안녕하세요, 친절하게도이 질문에 대답 해주십시오. 어쩌면 답안을 쓰거나 내 의견을 수렴하고 싶을 수도 있습니다. 좋은 점은 .https : //stackoverflow.com/questions/26955835/how-to-send-implement-puback-message-in-paho-android-service-api – user2121

+0

흠, 나는 MQTT에 익숙하지 않다. 나는 답을 모른다. 죄송합니다. – Boann