每当我尝试通过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;
如果有人可以提供帮助,我们将非常感激。
答案 0 :(得分:4)
htonl
/ ntohl
函数专门用于无符号32位整数。
htonl()
函数将无符号整数hostlong
从主机字节顺序转换为网络字节顺序。
答案 1 :(得分:1)
通过套接字传输数据时,无需将其转换为网络字节序。 此功能用于转换地址,而不是实际数据。这些函数使用无符号整数,因此它们与您的参数(有符号整数)
不匹配您需要省略它们。
如果第二台机器使用不同的endianess,这种情况很少见(8086和ARM体系结构都使用小端),则需要在读取整数和短路时交换字节。 这通常在接收套接字上完成。