TCP套接字C上的负数

时间:2012-12-22 19:07:29

标签: c sockets tcp

每当我尝试通过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;

如果有人可以提供帮助,我们将非常感激。

2 个答案:

答案 0 :(得分:4)

htonl / ntohl函数专门用于无符号32位整数。

  

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

答案 1 :(得分:1)

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

不匹配

您需要省略它们。

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