1

每当我尝试通过 TCP 套接字发送一个负数时,当我打印收到的内容时,它会显示“4.29497e+09”。我正在做的就是这样:

int i = -8;
int temp = htonl(i);
write(sock,&temp,4);

在服务器上:

int temp;
read(sock, &temp,4);
int read = ntohl(temp);
cout << read << endl;

如果有人可以提供帮助,将不胜感激。

4

2 回答 2

4

/函数专门用于无符号 32 位整数htonlntohl

htonl()函数将无符号整数hostlong从主机字节顺序转换为网络字节顺序。

于 2012-12-22T19:22:33.150 回答
1

通过套接字传输数据时,您不需要将其转换为网络字节序。此函数用于转换地址,而不是实际数据。这些函数适用于无符号整数,因此它们与您的参数(有符号整数)不匹配

你需要省略它们。

如果第二台机器使用不同的字节序,这种情况很少见(8086 和 ARM 架构都使用小字节序),则在读取整数和短字节时需要交换字节。这通常在接收套接字上完成。

于 2012-12-22T19:10:13.283 回答