字节序笔记
字节序简述
字节序,即字节的存储顺序,而计算机硬件有两种存储数据的方式:大端字节序 (big-endian) 和 小端字节序 (little endian)。
一般来说,计算机硬件的存储方式都是小端字节序;
而网络数据包为了可读性更高,会选择大端字节序。
从地址低端向地址高端,小端字节序是将多字节数据按从低位到高位的顺序存储;而大端字节序是将多字节数据按从高位到低位的顺序存储。
例如 0x01234567
的两种字节序存储方式如下图:
一般来说,只有在数据交换和读取数据的时候才需要注意字节序,例如
PowerPC 的数据转换成 Windows
下的数据的时候需要注意字节序问题;或是数据包数据的转换 (比如说C语言里的
htons
函数可以将主机字节顺序转变成网络字节顺序)。
C++ 实现
1 | WORD littleEndianToWord(const BYTE* a) |
对于大端字节序转储,在C++中直接使用强制类型转换即可。
python 实现
1 | def littleEndianToDword(a): |
同时 python 也存在函数可以将大端字节序的 bytes
数组转储为 int
型数据
1 | int.from_bytes(b'', 'big') |