問題タブ [struct-member-alignment]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 基本クラスと派生クラスの間のパディングを回避する保証された方法はありますか?
私は、ヘッダー部分とペイロード部分を持つパケットを処理するネットワーク プログラムに取り組んでいます。ヘッダーは可変長で、ネットワークの状態に応じて拡張セグメントが追加または削除されます。ユーザー データ部分はプレーン バイト バッファですが、パケットの作成中または使用中に何らかの構造として扱われる場合があります。
拡張フィールドを挿入するために必要に応じてヘッダー バイトを (おそらく) 前方または後方にシフトし、ユーザー データを含む派生クラスを使用して、ヘッダーを構築および操作する基本クラスが必要です。例えば:
とまたはの間にパディングがないことを保証する標準的な方法はありますか? たとえば、の派生クラスが追加のパディングなしで開始される場合はどうなりますか?hdr
payload1
payload2
start()
write()
(sizeof(hdr) % BIG_STANDARD_ALIGNMENT) == 0)
hdr
別の方法として、スキャッター/ギャザー I/O を使用することもできますが、これは複雑なセットアップのように思えます。単一の UDP パケットで送信するためにパケット フラグメントをまとめて収集することがうまくいくかどうかはわかりません。
c - C のビットフィールド構造体に追加された余分なビット
CAPWAP プロトコル用のクライアント C コードを作成しようとしています。ビット フィールド構造を使用して CAPWAP ヘッダーを実装してみました。しかし、sendto() を使用してソケット経由でこの構造体を送信した後、wireshark を使用してパケットを盗聴すると、その間にいくつかの余分なビットが追加されていることがわかります。これがどこから来たのか、私には手がかりがありません。助けを求めています。前もって感謝します。
構造体の最後のいくつかのメンバーにコメントを付けて、4バイトで整列させようとしました。それでも問題は解決しません。
元のヘッダーです
これらにコメントしてみました
これは、構造体が取り込まれる場所です
最初の 32 ビットの Wireshark の出力を次に示します。
期待される結果 : ビットは構造体に記載されている順序である必要があります エラー : 余分なビットが構造体メンバー間に追加されます