Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在将通过套接字发送的32位整数上使用htonl/ntohl_C++_Winsock - Fatal编程技术网

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

C++ 在将通过套接字发送的32位整数上使用htonl/ntohl,c++,winsock,C++,Winsock,当我查找htonl的示例时,它总是返回一个uint32\u t。但是,当我在VS2015中使用Winsock2.h调用htonl时,它返回一个u_long 在我的机器上,当我编译32位和64位时,我得到u_长的大小是4字节。我在网上读到,在64位体系结构中,长应该是8字节。这种情况会发生吗?我担心在通过套接字发送数据时,如果u_长度与uint32_t的字节数不一样,就会出现兼容性问题 TL;DR-u_长度是否始终为4字节?如果不是,您应该如何通过套接字可靠地发送32位整数?u_long是一个ty

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

在我的机器上,当我编译32位和64位时,我得到u_长的大小是4字节。我在网上读到,在64位体系结构中,长应该是8字节。这种情况会发生吗?我担心在通过套接字发送数据时,如果u_长度与uint32_t的字节数不一样,就会出现兼容性问题


TL;DR-u_长度是否始终为4字节?如果不是,您应该如何通过套接字可靠地发送32位整数?

u_long
是一个
typedef
无符号长
,long反过来保证(或应该)至少是32位,即至少是4个字节。在某些系统上,它可能更大,但实际上无法提前知道

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

此外,在处理整数时,发送/接收数据所使用的字节顺序也无关紧要。 如果你两边都有相同的操作系统,这不会是一个问题——但是如果你在Windows和Linux之间切换,这可能是一个问题