浮点数/float/double 是否需要考虑网络字节序的问题
2011-10-28 11:07
260 查看
在网络上传输数据时,对整数,我们使用转换为网络字节序的方法,来保证跨平台传输数据时不会出现字节顺序问题导致的解析错误,但是对浮点数,是否也需要这样做?
在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中网络应用程序需要考虑的问题
- 灰度发布需要考虑的问题
- 关于 Oracle外键列上是否需要索引问题?
- 关于 Oracle外键列上是否需要索引问题?
- 星期天算起来应该是最忙的一天吧(网吧母盘制作需要注意并考虑的问题)
- 重构模式(三)---- 应用 Refactoring 需要考虑的问题
- 在书写高效 CSS 时会有哪些问题需要考虑?
- 购买mysql服务器时需要考虑的问题
- Asp.net 2.0的异常处理需要考虑的问题
- 关于IOS开发中数据版本更新需要考虑的问题
- Java 中使用内存映射文件需要考虑的 10 个问题
- 在书写高效 CSS 时会有哪些问题需要考虑?
- mysql 转orecle 需要考虑的问题
- 关于ubuntu 是否需要使用std::到问题。
- 关于网络编程中的字节序问题