小端字节序和大端字节序

以32位整数:0x12345678为例,该数据位数从左至右依次降低

小端字节序:数据的低位在低地址,高位在高地址。0x12345678的小端字节序为:[0x78, 0x56, 0x34, 0x12],地址从左至右依次升高

大端字节序:数据的高位在低地址,低位在高低值。0x12345678的大端字节序为:[0x12, 0x34, 0x56, 0x78],地址从左至右依次升高

在UDP和TCP等网络应用中,为避免字节序带来的麻烦,套解字接口库规定凡是在网络中交换的多字节整数(short、int、long、long long和它们的unsigned版本)一律采用网络字节序传输。所谓网络字节序,其实就是大端字节序。也就是说发数据时,先从主机字节序转成网络字节序,然后发送;收数据时,先从网络字节序转成主机字节序,然后使用。
– 小端机A,0x12345678,主机序[0x78,0x56,0x34,0x12]转成网络序[0x12,0x34,0x56,0x78],发送给B和C
– 大端机B,接收网络序[0x12,0x34,0x56,0x78],转成主机序[0x12,0x34,0x56,0x78],0x12345678
– 小端机C,接收网络序[0x12,0x34,0x56,0x78],转成主机序[0x78,0x56,0x34,0x12],0x12345678

关于浮点数/float/double 是否需要考虑网络字节序的问题​​​​​​​,参考:浮点数/float/double 是否需要考虑网络字节序的问题_编码无悔-CSDN博客_浮点数 网络字节序

问:为什么在网络编程中,需要考虑字节序的问题时,对于double、float以及字符串等数据类型不需要考虑主机序列和网络序列之间的转换?

答:float和double与CPU无关。一般来说,编译器是按照IEEE标准解释的,即把float/double看作4/8个字符的数组进行解释。因此,只要编译器是支持IEEE浮点标准的,就不需要考虑字节顺序。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值