浮点数/float/double 是否需要考虑网络字节序的问题
2010-06-26 17:23
936 查看
在网络上传输数据时,对整数,我们使用转换为网络字节序的方法,来保证跨平台传输数据时不会出现字节顺序问题导致的解析错误,但是对浮点数,是否也需要这样做?
在socket编程中,只有针对整型的字节顺序转换函数,例如htonl(),htons()等,浮点数怎么办?
这里先转载一段网上摘取的文章:
_______________________________________________________________________________
问:为什么在网络编程中,需要考虑字节序的问题时,对于double、float以及字符串等数据类型不需要考虑主机序列和网络序列之间的转换?
答:float和double与CPU无关。一般来说,编译器是按照IEEE标准解释的,即把float/double看作4/8个字符的数组进行解释。因此,只要编译器是支持IEEE浮点标准的,就不需要考虑字节顺序。
_______________________________________________________________________________
大家注意到,这里说不需要转换,也是有条件的。我没有考证过例外情况的存在比例,但是我相信在绝大部分情况下,编译器都是符合IEEE标准的。
如果你实在不放心,可以采取下面两种办法:
(1)在保证不超过int范围的情况下,将浮点数乘以100(或1000,10000,视所需精度随你定)转换为整数传输,在接收端再除以100,得到浮点数。
(2)将浮点数转换为字符串传输,由于字符串是一个字节一个字节的流,就不会有字节顺序的问题了。
在socket编程中,只有针对整型的字节顺序转换函数,例如htonl(),htons()等,浮点数怎么办?
这里先转载一段网上摘取的文章:
_______________________________________________________________________________
问:为什么在网络编程中,需要考虑字节序的问题时,对于double、float以及字符串等数据类型不需要考虑主机序列和网络序列之间的转换?
答:float和double与CPU无关。一般来说,编译器是按照IEEE标准解释的,即把float/double看作4/8个字符的数组进行解释。因此,只要编译器是支持IEEE浮点标准的,就不需要考虑字节顺序。
_______________________________________________________________________________
大家注意到,这里说不需要转换,也是有条件的。我没有考证过例外情况的存在比例,但是我相信在绝大部分情况下,编译器都是符合IEEE标准的。
如果你实在不放心,可以采取下面两种办法:
(1)在保证不超过int范围的情况下,将浮点数乘以100(或1000,10000,视所需精度随你定)转换为整数传输,在接收端再除以100,得到浮点数。
(2)将浮点数转换为字符串传输,由于字符串是一个字节一个字节的流,就不会有字节顺序的问题了。
相关文章推荐
- 浮点数/float/double 是否需要考虑网络字节序的问题
- 浮点数/float/double 是否需要考虑网络字节序的问题
- 浮点数/float/double 是否需要考虑网络字节序的问题
- 网络编程需要考虑的问题
- Android中网络应用程序需要考虑的问题
- 关于环境变量设置是否需要重启的问题
- 关于企业投资所得是否需要再交所得税的问题
- 使用系统的某些block api(如UIView的block版本写动画时),是否也考虑引用循环问题?
- PHP学习之路之PHP文件上传需要考虑的问题以及解决方法($_FILES,$_SERVER,substr,strrpos,file_exists,move_uploaded_file,is_uploaded_file,mkdir)
- ASP.Net设计时需要考虑的性能优化问题 转载自http://blog.sina.com.cn/s/blog_3d7bed650100055p.html
- 在VC++2005 MFC Unicode下编写网络程序需要注意的问题
- 从ASP.NE T 1.1升级到ASP.NET 2.0需要考虑的Cookie问题
- Asp.net 2.0的异常处理需要考虑的问题
- 32位程序移植到64位需要考虑的问题
- 大小端问题网络字节序
- 高性能服务器设计时需要考虑的几个问题
- 问题记录:每次移动相机是否需要重新标定(已解决)
- 写复杂的网络交互系统模块时需要考虑什么
- 灰度发布需要考虑的问题