endian
看Endianness Explained, 有点意思
在计算机的世界中,最小可以寻址的单位通常是 byte,1 个 byte 是 8 bits,这个没有争议。但其实严格讲的话,看struct iphdr也存在到bit位的端序
如果一个数据类型需要占用多个 bytes,比如 32 位的 int,占用 4 个 bytes,那我们在编程的时候会用一个内存地址表示这个 int,从这个地址开始,后面一共 4 个 bytes,来表示一个 int
比如一个 16 进制表示的 int 值:0x01020304,其中 01 是 most significant bit,是重要的数字,因为它决定了整个数字的数量级是多大,可以把 01 叫做大头,如果把大头放在前面,即,表示成 0x01020304,这就是 Big Endian. 如果把大头放在这 4 个 bytes 的最后,即,表示成 0x04030201,那就是 Little Endian.
现代的大部分 CPU 是 Little Endian, 网络使用 Network Byte order,是 Big Endian。
从阅读习惯看,我们是从左往右看数字的
比如
1
65535
从左往右是高位数字到低位数字,最左边的是最高位。
内存地址一般低地址在最下面,高地址在最上面。
大端序
1
2
3
4
高地址 0x0003 | 0x78 | 低位数字
0x0002 | 0x56 |
0x0001 | 0x34 |
低地址 0x0000 | 0x12 | 高位数字
小端序
1
2
3
4
高地址 0x0003 | 0x12 | 低位数字
0x0002 | 0x34 |
0x0001 | 0x56 |
低地址 0x0000 | 0x78 | 高位数字
而我们通常编写和阅读的电脑文件中,总是习惯于从上到下,从左到右。此时低地址在左边或者在上边,高地址在右边或者下边。
This post is licensed under CC BY 4.0 by the author.