网络通信之字节序的理解

   大端和小端是什么意思

  "大端"和"小端"表示多字节值的哪一端存储在该值的起始地址处;小端存储在起始地址处,即是小端字节序;大端存储在起始地址处,即是大端字节序; 或者说: 1.小端法(Little-Endian)就是低位字节排放在内存的低地址端(即该值的起始地址),高位字节排放在内存的高地址端; 2.大端法(Big-Endian)就是高位字节排放在内存的低地址端(即该值的起始地址),低位字节排放在内存的高地址端; 举个简单的例子,对于整型数据0x12345678,它在大端法和小端法的系统中,各自的存放方式如下图1所示:

以上是摘自gavinjun的博客

 

  我的理解

  tcp/ip协议栈有两个地方做了限制:

  作为网络通信的接收端:总是把收到的第一个字节作为高字节存储起来,第二个字节就放在第二高的地址存储起来...

  作为网络通信的发送端:协议栈总是从发送缓存中(你也可以想象成要send的buff)低地址起始处,来取第一个要发送的字节,也就是所谓的高字节。

 

  举个例子:

    两端平台相同情况(同为大字节序或者小字节序)

    发送端是大字节序,发送端发一个0x12345678,那么 网络中顺序也是先进78,再进56,再进34,再进12, 最后整个包在传输过程中也就是0x12345678. 

    发送端是小字节序,发送端发一个0x12345678,那么 网络中顺序也是先进78,再进56,再进34,再进12, 最后整个包在传输过程中也就是0x12345678. 其中,网络想取高字节内容,但是取的是低字节内容,但恰巧被当成高字节后往低地址存放了,结果接收端就收到了0x12345678.

    两端平台不同情况(一端为大字节序一端为小字节序)

    发送端是大字节序,发送端发一个0x12345678,那么 网络中顺序也是先进78,再进56,再进34,再进12, 最后整个包在传输过程中也就是0x12345678. 然而,在我接受这端,我这个时候期望得到的是0x78562312

  

  PS. 我的同事说我理解的有问题,但是我没发现,如果谁阅读了我写的内容且发现了问题,求指教,不胜感激!

  

转载于:https://www.cnblogs.com/lcy-software/p/5345101.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值