大端和小端是什么意思

  "大端"和"小端"表示多字节值的哪一端存储在该值的起始地址处;小端存储在起始地址处,即是小端字节序;大端存储在起始地址处,即是大端字节序; 或者说: 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. 我的同事说我理解的有问题,但是我没发现,如果谁阅读了我写的内容且发现了问题,求指教,不胜感激!

  

posted on 2016-04-01 15:24  Hofn  阅读(987)  评论(0编辑  收藏  举报