gpt4 book ai didi

c++ - 在将通过套接字发送的 32 位整数上使用 htonl/ntohl

转载 作者:行者123 更新时间:2023-11-30 05:30:09 24 4
gpt4 key购买 nike

当我查找 htonl 的示例时,它总是返回一个 uint32_t。但是,当我使用 Winsock2.h 在 VS2015 中调用 htonl 时,它返回一个 u_long

在我的机器上,当我为 32 位和 64 位编译时,我得到 u_long 的大小是 4 个字节。我在网上看到,在 64 位架构中,long 应该是 8 个字节。会是这样吗?我担心如果要通过套接字发送数据时 u_long 的字节数与 uint32_t 的字节数不同,我会遇到兼容性问题。

TL;DR - u_long 总是 4 个字节吗?如果不是,您应该如何通过套接字可靠地发送 32 位整数?

最佳答案

u_longtypedefunsigned long,long 反过来(或应该)保证至少为 32 位 - 即至少是 4 个字节。在某些系统上它可能更大 - 但实际上没有办法提前知道。

因此,当您进行网络通信并希望发送大于一个字节的整数时,您必须注意自己限制大小。不要只发送 sizeof 字节,将其限制为四个字节。

此外,在处理整数时,使用哪种字节顺序发送/接收数据也无关紧要。如果双方使用相同的操作系统,这将不是问题 - 但例如,如果您在 Windows 和 Linux 之间切换,则可能会成为问题。

关于c++ - 在将通过套接字发送的 32 位整数上使用 htonl/ntohl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36115535/

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