我应该使用什么类型的C enum的二进制表示?

我知道C enum是无符号整数,但这可能因实现而异。 我应该在二进制表示中使用什么类型的枚举?

* PS’二进制表示’表示字节数组。 我想将枚举值序列化为socket以与其他程序进行交互操作。

编译器可以使用int来表示enum类型,如果int不足以保存enum所有值,则可以使用int

如果您知道所有enum值都可以用int表示,那么您可以安全地使用int作为enum值的二进制表示。

由于枚举只是设置整数的奇特方法,因此您应该选择足够大的整数类型来存储所有枚举值。 通常,char应该足够,然后没有序列化问题。 但我会选择短期或长期。 在序列化时,我会使用ntohs/htonsntohl/htonl (参见他们的手册页)来确保序列化处于网络字节顺序,并且反序列化是按主机字节顺序排列的。

xdr – 外部数据表示的库例程怎么样?

重新发明轮子很少会产生更好的效果。