据我所知,C 枚举是无符号整数,但这可能因实现而异。我应该为二进制表示中的枚举使用什么类型?
*PS“二进制表示”表示字节数组。我想将枚举值序列化到套接字以与其他程序互操作。
据我所知,C 枚举是无符号整数,但这可能因实现而异。我应该为二进制表示中的枚举使用什么类型?
*PS“二进制表示”表示字节数组。我想将枚举值序列化到套接字以与其他程序互操作。
由编译器决定使用 anint
来表示一个enum
类型,或者long
如果 anint
不足以容纳enum
.
如果您知道所有enum
值都可以用 表示int
,那么您可以安全地int
用作值的二进制表示enum
。
由于枚举只是设置整数的奇特方式,因此您应该选择一个足够大的整数类型来存储所有枚举值。通常,一个 char 就足够了,并且没有序列化问题。但我会选择短期或长期。序列化时,我会使用ntohs/htons
or ntohl/htonl
(参见他们的手册页)来始终确保序列化是网络字节顺序,反序列化是主机字节顺序。
怎么样xdr
- 用于外部数据表示的库例程?
重新发明轮子很少能产生更好的结果。