gpt4 book ai didi

c - htons()、htonl()、ntohs()、ntohl() 用于枚举

转载 作者:太空宇宙 更新时间:2023-11-04 01:54:27 24 4
gpt4 key购买 nike

我需要在可能位于不同平台的服务器和客户端之间发送一个枚举缓冲区。

但是枚举的大小取决于平台,我应该调用哪个函数? (htons() 或 htonl()),例如以下枚举:

typedef enum f_test_enum{
F0 = 0,
F1 = 1,
F2 = 2,
F3 = 3
} f_test_type;

记住 C 标准 (C99):http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1256.pdf

6.7.2.2 枚举说明符

[...]

Constraints The expression that defines the value of an enumeration constant shall be an integer constant expression that has a value representable as an int.

[...]

Each enumerated type shall be compatible with char, a signed integer type, or an unsigned integer type. The choice of type is implementation-defined, but shall be capable of representing the values of all the members of the enumeration.

[编辑]如果我的枚举是:

typedef enum n_test_large_enum{
N1 = 0,
N2 = 1,
N2 = 2,
N120000 = 120000
} n_test_large_type;

或者也许:

typedef enum n_test_short_enum{
N0 = 0,
N1 = 1,
N2 = 2,
N60000 = 60000
} n_test_short_type;

当我使用 hton*() 或 ntoh*() 时,我应该注意枚举的可能值吗?我可以对所有枚举采取相同的行为吗?

最佳答案

只要双方同意编码,只有值很重要。

因此,只要您的值适合 short,那么 htons()htonl() 都可以工作,前提是双方一致。

如果它真的适合一个字节,就发送它,使整个字节顺序问题消失。

关于c - htons()、htonl()、ntohs()、ntohl() 用于枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37035341/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com