ネットワーク経由で送信される列挙値をシリアル化する必要があります。送信部分は C で記述され、8 ビットのマイクロコントローラーで実行されます。プロトコル バッファーや同様のライブラリは利用できません。受信部分は C++ (Linux) です。私は次のアプローチを試しました:
enum enum_x {
V1 = 1,
V2 = 2,
};
enum enum_y {
V3 = 1,
V4 = 2,
V5 = 3,
};
enum enum_z {
V6 = 1,
V7 = 2,
V8 = 3,
};
uint8_t serialize_enums(enum_x x, enum_y y, enum_z z) {
return x * 100 + y * 10 + z;
}
しかし、それは有効ではないようです。私の Linux ボックスでは問題なく動作しますが、8 ビット システムでは結果が正しくありません (y 値は z として保存されているようで、z 値がありません)。キャストを追加しようとしました:
return (uint8_t)x * 100 + (uint8_t)y * 10 + (uint8_t)z;
しかし、それは役に立ちませんでした。正しいアプローチは何ですか?