私が知っているように、C列挙型は符号なし整数ですが、これは実装によって異なる場合があります。バイナリ表現の列挙型にはどのタイプを使用する必要がありますか?
*PS'バイナリ表現'はバイト配列を意味します。他のプログラムと相互運用するために、列挙値をソケットにシリアル化したい。
私が知っているように、C列挙型は符号なし整数ですが、これは実装によって異なる場合があります。バイナリ表現の列挙型にはどのタイプを使用する必要がありますか?
*PS'バイナリ表現'はバイト配列を意味します。他のプログラムと相互運用するために、列挙値をソケットにシリアル化したい。
型int
を表すためにを使用するか、またはのすべての値を保持するのに十分でない場合は、コンパイラに依存します。enum
long
int
enum
すべてのenum
値をで表すことができることがわかっている場合は、値のバイナリ表現としてint
安全に使用できます。int
enum
列挙型は整数を設定するための単なる凝った方法であるため、すべての列挙型の値を格納するのに十分な大きさの整数型を選択する必要があります。通常、charで十分であり、シリアル化の問題はありません。しかし、私は代わりに短いか長い間行きます。シリアル化するときは、ntohs/htons
またはntohl/htonl
(マニュアルページを参照)を使用して、シリアル化がネットワークバイトオーダーであり、逆シリアル化がホストバイトオーダーであることを常に確認します。
外部データ表現用のライブラリルーチンはどうxdr
ですか?
車輪の再発明によって、より良いものが生まれることはめったにありません。