3

C でプロトコル バッファを使用して 8 バイトの MAC アドレス データ要素を定義しようとしています。

message mac {
    required bytes address = 1 [(nanopb).max_size = 8];
}

ただし、これにより、サイズ フィールドと 8 バイトのアドレス フィールドを持つ構造体が作成されます。8 バイトのアドレス フィールドだけを希望します。

MAC アドレスは一連のバイトであるため、fixed64 要素の使用を拒否しました。私はプロトコルバッファにかなり慣れていないので、これが簡単な質問である場合は申し訳ありません。

4

1 に答える 1

2

「バイト」フィールドに最小長を強制する方法がないため、サイズ フィールドが生成されます。したがって、メッセージの作成者がフィールドに 8 バイトを指定しなかった場合、残りはガベージ データになります。

サイズフィールドは問題を引き起こしますか? 確かに 2 ~ 4 バイトの RAM を消費しますが、それだけです。

(私は nanopb の作成者ですが、おそらくこれはすべての protobuf 実装で同じです。)

更新: nanopb 0.3.8 (2017 年にリリース) 以降、オプションを使用した固定長バイト フィールドがサポートされるようになりまし(nanopb).fixed_length = trueた。

于 2012-07-14T18:52:56.017 に答える