(1)首先,大小端在两个地方会遇到,1是CPU的架构模式,2是网络传输过程中的传输模式。CPU的大小端模式会影响到编程,因为涉及到数据在内存会怎么存;网络传输模式则会影响你接收数据的先后,影响你对数据的处理。
(2)所谓大端,就是高字节数据存储在内存低地址处,而所谓小端就是低字节数据存储在内存高地址处。注意:0x00001000中,左边2字节(0000)是高字节,右边2字节(1000)是低字节。
(3)以太网通讯协议中,先传低字节,再传高字节,说明对方是以小端模式进行的传输。对方会将通讯协议中低字节的数据,先丢到网络上。
(4)一般ARM处理器是小端模式,如果对方是以小端模式发送数据到ARM平台,则本地数组的低位置(标号小的),存储的即是对方发来的低字节数据,高位置处存放的是对方发来的高字节数据。
(5)先传高字节,再传低字节,是大端传输模式,这样的数通过网络传输到ARM平台后,数组的低位置处存储的是一个32位数或者16位数的高字节数据。ARM平台需要进行数据位置的对调,才能正确读数。
(6)单字节数据不受大小端影响,只有多字节数据才会,而且也是比如32位数据自己的4个字节数据顺序会是反的,而不影响与其他32位数据的顺序,也就是说几个多字节数据之间的顺序都是正常的,按照你组包填写的顺序来的。一般情况下,在两个平台应用软件里用结构体定义的数据,结构体元素之间的先后顺序不会变。同时,一个字节内部的各个bit位也不会变。
(7)大端字节序就是网络字节序。
(8)不用管网络会调换你发送的顺序,你发的数据顺序是什么,网络上就是什么。一般小端机器发送的数,不经过处理,用tcpdump抓包,抓出的报文低位置处一般都是低字节,比如你发的数是0x00001011,在网络上看到的是11100000,其中1011是低2字节。而如果转成大端模式发送,则抓包看到的是00001011,高字节在网络的低位置处。
(9)大小端转换,其实就是32位数或者16位数,内部的4个字节或者2个字节完全反过来即可,与字节内部的bit位无关。