大端序和小端序
一:大端字节序和小端字节序
在不同的CPU上,一个DWORD、WORD等基本数据的各个字节在内存中存储的顺序可能不一样,分为两种大端字节序和小端字节序。
大端字节序,高字节存于内存低地址,低字节存于内存高地址;小端字节序反之。如一个long型数据0x12345678
大端字节序:
内存低地址–> 0x12
0x34
0x56
内存高地址–> 0x78
小端字节序:
内存低地址–> 0x78
0x56
0x34
内存高地址–> 0x12
二:大端序和小端序
采用大端序的CPU和采用小端序的CPU不仅在字节上是相反的,在比特位上也是相反的。
比如0x01在内存中的存储
大端序:内存低比特位 00000001 内存高比特位
小端序:内存低比特位 10000000 内存高比特位
比如0x00000001
大端序:内存低比特位 00000000 00000000 00000000 00000001 内存高比特位
小端序:内存低比特位 10000000 00000000 00000000 00000000 内存高比特位
这也是为什么我们定义位域的时候需要判断字节序。比如
struct exmpl{
#if 大端
BYTE ver:4;
BYTE len:4;
#else
BYTE len:4;
BYTE ver:4;