如果我想在网络上传输带符号的长整数(32位整数),我该怎么办?如果我作为签名长发送,那么在另一端我不会(可能)知道远程机器如何代表签名号码?那我该怎么办?
答案 0 :(得分:7)
只需使用ntohl
和htonl
,然后在uint32_t
和int32_t
之间来回转换或隐式转换。
答案 1 :(得分:2)
因为ntohl()
在字节顺序上运行,所以它并不关心符号,它所关心的是它有多少位。回答标题中的问题。
回答“我该怎么办?”的问题。超出说明你问的问题 - 你将它转换为无符号然后转换回另一个符号,因为除了不知道它是否已签名,任意遥控器也不知道这个数字是什么和你的特定遥控器可能更了解此事。
答案 2 :(得分:1)
如果两个系统对负整数使用不同的表示(例如,二进制补码,符号幅度),则将数字作为字符串传输并将其解析为接收器上的整数。效率不高,但除非您传输大量数字,否则无关紧要。如果要传输的数字很多,您可以使用某种形式的压缩。
或者,为负数定义自己的网络表示,并编写自己的ntohsl
和htonsl
。
在任何一种方法中,每个系统上都会有一个号码无法在另一个号码上表示;你需要在收到这个号码时决定适当的行动方案。