完全な背景 (問題を理解するためにこれを理解する必要はありませんが、役立つ場合があります) については、イーサネット経由でデータを送信する CLI プログラムを作成しており、VLAN タグと優先度タグをイーサネット ヘッダーに追加したいと考えています。
私が直面している問題は、3 つの小さい値から構築された単一の 16 ビット整数値があることです: PCP
3 ビット長 (つまり 0 から 7)、DEI
1 ビット長、そしてVLANID
12 ビット長 (0 から 4095) です。PCP
一緒にDEI
最初の 4 ビット ニブルを形成し、VLANID
加算からの 4 ビットで最初のバイトを完成させ、残りの 8 ビットでVLANID
整数の 2 番目のバイトを形成します。
11123333 33333333
1 ==PCP
ビット、2 ==DEI
ビット、3 ==VLANID
ビット
PCP
== 5 (バイナリでは 101、DEI
== 0、および== 164、バイナリでは 0000 10100011) のふりVLANID
をしましょう。まず、次のようにこれらの値をまとめてコンパイルする必要があります。
10100000 10100101
私が直面する問題は、この整数をバッファーにコピーしてワイヤー (イーサネット媒体) にエンコードするときに、ビットの順序が次のように変化することです (整数をワイヤーにコピーする前にバイナリで出力し、wireshark を使用して比較するためにネットワーク上でキャプチャします):
メモリ内のビット順:abcdefgh 87654321
ワイヤ上のビット順序:8765321 abcdefgh
ここには2つの問題があります。
- 1つ目は、3つの小さい整数を「くっつけて」2バイト整数を作成することです
- 2 つ目は、ビットの順序がワイヤ上で正しくエンコードされることを保証することです (したがって、バイトは逆順ではありません)。
明らかに、私はこのコードでこれを達成しようとしましたが、私は本当に深みがなく、これまでに行ったことを投稿して誰かがそれを変更する方法を提案するのではなく、誰かの提案を最初から見たいと思っています必要な機能を、おそらく読みにくく、長々とした方法で実行します。