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