在网络上传输数据时,对整数,我们使用转换为网络字节序的方法,来保证跨平台传输数据时不会出现字节顺序问题导致的解析错误,但是对浮点数,是否也需要这样做?
在socket编程中,只有针对整型的字节顺序转换函数,例如htonl(),htons()等,浮点数怎么办?
这里先转载一段网上摘取的文章:
_______________________________________________________________________________
问:为什么在网络编程中,需要考虑字节序的问题时,对于double、float以及字符串等数据类型不需要考虑主机序列和网络序列之间的转换?
答:float和double与CPU无关。一般来说,编译器是按照IEEE标准解释的,即把float/double看作4/8个字符的数组进行解释。因此,只要编译器是支持IEEE浮点标准的,就不需要考虑字节顺序。
_______________________________________________________________________________
大家注意到,这里说不需要转换,也是有条件的。我没有考证过例外情况的存在比例,但是我相信在绝大部分情况下,编译器都是符合IEEE标准的。
如果你实在不放心,可以采取下面两种办法:
(1)在保证不超过int范围的情况下,将浮点数乘以100(或1000,10000,视所需精度随你定)转换为整数传输,在接收端再除以100,得到浮点数。
(2)将浮点数转换为字符串传输,由于字符串是一个字节一个字节的流,就不会有字节顺序的问题了。