Bigendian、littleendian的结构体反序总结

Bigendian顺序和读出来相同,littleendian和读出来顺序相反。

对于一个结构体,使用bigendian和littleendian,内部元素的顺序变化,取决于具体的元素类型。

反序的原则:

  • 对于连着的几个超过一个字节(含一个字节)的元素,例如下图中的sourceport、destinationport、sequencenumber、requestnumber而言,无论大端小端,它们之间的先后顺序是不会改变的。

  • 对于连着的几个小于一个字节的元素而言,例如下图中的res1+doff、fin到cwr这两组元素,这两组内部的顺序是前后颠倒的,即元素之间的顺序会因大端小端而不同,但两组之间的先后顺序依然是不变的。

  • 对于一个大元素(字节倍数大小)内部的反序,实际上是按字节为单位的反序,而不是具体bit位的全反序(即,12345678 23456789是变成23456789 12345678,而不是变成98765432 87654321),可见下面这张图片的例子。一个十六进制数字,4个bit,两个才是1字节,所以实际上判断的是字节之间的十六进制的01和02的先后,也不是具体bit的先后。

  • 产生每个bit都会倒序的错觉,实际上是因为下图中的fin到cwr8个元素每个都只有1bit,小元素字节组间具体元素的倒序形式上等同于按bit倒序,但实际上原理应该是按元素倒序而不是按bit倒序。

总结:littleendian、bigendain涉及到结构体元素的先后顺序时,应视元素大小而定:

  1. 8bit以上(含8bit)大元素,元素之间顺序固定;元素内部,字节之间顺序颠倒;字节内部的bit顺序不变。
  2. 8bit以下小元素组成的元素字节(8bit)组,字节组内部,元素之间顺序颠倒,具体元素内部顺序不变。

即小元素的字节组和大元素之间并列为第一级别;

每个大元素内部具体字节间(如IP)和同一字节元素组小元素之间为第二级别;

大元素具体字节内部bit和小元素内部bit为第三级别。

反序的实质:

第一级别顺序不变;

第二级别顺序颠倒;

第三级别顺序不变。

举例:IP:192.168.128.64的倒序,属于第二级别,是四个数字顺序的倒序,即64.128.168.192,四个数字内部不再倒序,这和前文中8个1bit元素倒序本质上是相同的(第二级别的倒序是颠倒元素间的顺序)。

猜你喜欢

转载自blog.csdn.net/Zjhao666/article/details/85469237
今日推荐