ネットワーク経由でデータグラムを受信しましたが、適切なフィールド(メッセージのフォーマットに対応)を持つ構造体にデータをコピーしたいと思います。さまざまなタイプのデータグラム(フィールドとサイズが異なる)があります。ここでは単純化されたバージョンは、(実際にフィールドは常に文字の配列です)です。パディングを無視して構造体サイズを決定する
struct dg_a
{
char id[2];
char time[4];
char flags;
char end;
};
struct dg_a data;
memcpy(&data, buffer, offsetof(struct dg_a, end));
現在、私は私がどのように多くのバイトを決定するためにoffsetof
を使用できるように、ダミーのフィールドは、構造体の最後にend
と呼ばれる追加しますコピー。
これを行う方が、エラーが発生しにくい方法がありますか?私は__attribute__((packed))
を入れてsizeof
を使うよりもポータブルなものを探していました。
- コメントに
EDIT
何人かが私のアプローチが悪いと述べていたが、これまでのところ、誰もこれが理由を提示していません。構造体メンバはchar
なので、トラップ表現はなく、メンバ間のパディングもありません(標準で保証されています)。
コメントは議論の対象外です。この会話は[チャットに移動]されています(http://chat.stackoverflow.com/rooms/138031/discussion-on-question-by-martinkunev-determine-struct-size-ignoring-padding)。 – meagar