我知道C enum是无符号整数,但这可能因实现而异。 我应该在二进制表示中使用什么类型的枚举?
* PS '二进制表示'表示字节数组。我想将枚举值序列化为socket以与其他程序进行交互。
答案 0 :(得分:2)
编译器可以使用int
来表示enum
类型,如果long
不足以保存所有值,则使用int
enum
。
如果您知道所有enum
值都可以由int
表示,那么您可以安全地使用int
作为enum
值的二进制表示。< / p>
答案 1 :(得分:1)
由于枚举只是设置整数的奇特方法,你应该选择足够大的整数类型来存储所有枚举值。通常,char应该足够,然后没有序列化问题。但我会选择短期或长期。在序列化时,我使用ntohs/htons
或ntohl/htonl
(参见他们的手册页)始终确保序列化处于网络字节顺序,并且反序列化是按主机字节顺序。
答案 2 :(得分:0)
xdr
- 外部数据表示的库例程怎么样?
重新发明轮子很少会产生更好的效果。