2017-12-03 19 views
1

protobufでは、符号付きまたは符号なしの32ビットまたは64ビット整数を使用して値の範囲を制限することしかできません。protobufで最大値を設定できますか?

しかし、私が定義したいデータ構造には、8ビット、16ビット、および32ビットの整数が混在しており、組み込み機器のスペースを節約します。その上、データ構造もやや異なって実装されており、いくつかのフィールドには特別な値が予約されているため、最大数は2の累乗ではありません。

これらの組み込みデバイスでは、protobuf定義は実際の保管のためではありません。

しかし、これらの最大値を、すべてのクライアントアプリケーションがこれらの制限を認識していることを確認するために、.protoまたは.optionsファイルに定義したいと思います。

これを行う方法はありますか?

フィールドオプションがあることは知っていますが、リストされたものはhereにはオプションが含まれていません。カスタムオプションを作成することは可能ですが、コンパイラ拡張を書く必要があります。つまり、コンパイルする言語ごとにこの制限チェックを手作業で実装しなければならず、時間がかかります。

答えて

1

いいえその意図を表すための構文はなく、追加するルールを実行するツール/コードジェネを作成していません。これは手動で処理する必要があります。

2

サードパーティの実装には、このようなサポートが含まれています。例えば

、私自身のnanopbはint_size optionがあります

int_size:フィールドの整数型をオーバーライドします。 (例えば、uint8_tを使用してRAMを節約する場合)

これは、値がフィールドに収まらない場合、実行時にエラーpb_decode()を返します。

+0

私は実際にarduinoでnanopbを使用しています。残念ながら、arduinoと直接通信しないアプリケーション間でもメッセージが送信されるため、これは完璧ではないため、これらの制限については認識しません。 – iFreilicht

関連する問題