質問: 321 ``` わからないのは、193と2をヘッダのどの部分に置けばよいかがわかりません。 ``` 0000 0010(2)と1100 0001(193) ``` これをどこに置けばよろしいのでしょうか? ``` 0001 0000(CONNECT) ``` と続いた場合、普通に ``` 0000 0010(2) 1100 0001(193) ``` と置けばよろしいのでしょうか? しかし、そうした場合はどこまでが[ヘッダの残りの長さ]を表すのかがわからないと思うのですが・・ MQTTについて詳しい方、ご教授の方宜しくお願いします。
回答: > > わからないのは、193と2をヘッダのどの部分に置けばよいかがわかりません。 > > > MQTTについては全然詳しくないので、リンク先の仕様書からわかることだけ書くと、 ``` バイト1: 0001 0000(CONNECT) バイト2: 1100 0001(193) 0000 0010(2) ``` というバイト並びになります。(2→193の順ではなく、掲載アルゴリズムにより出力された通り193→2の順です。) > > しかし、そうした場合はどこまでが[ヘッダの残りの長さ]を表すのかがわからないと思うのですが・・ > > > 上記のように並べると、「8 番目のビット」(最上位ビット)が0のバイトまで「残りの長さ」を表すことがわかります。ちなみにここに置かれるのは、「残りの長さ」であり、「[ヘッダの残りの長さ]」ではないですね。「「残りの長さ」とは、可変ヘッダーの長さ (12 バイト) とペイロードの長さです。これはマルチバイト・フィールドにすることができます。」と言うことだそうです。 「残りの長さ」は、「1Byteで構成されている」とはどこにも書いておらず、「(最小 1 バイト)」「このプロトコルでは、「残りの長さ」を表すバイト数が最大 4 に制限されます。」と書かれており、1〜4バイトの可変長ですね。