地址增长方向 →
...
0x0D
0x0C
0x0B
0x0A
...
最低有效位(LSB,Least Significant Byte)是0x0D 存储在最低的内存地址处。后面字节依次存在后面的地址处。
数据以16bit为单位:
地址增长方向 →
...
0x0C0D
0x0A0B
...
最低的16bit单元0x0C0D存储在低位。
采用大端序的CPU和采用小端序的CPU不仅在字节上是相反的,在比特位上也是相反的。
比如0x01在内存中的存储
大端序:内存低比特位 00000001 内存高比特位
小端序:内存低比特位 10000000 内存高比特位
比如0x00000001
大端序:内存低比特位 00000000 00000000 00000000 00000001 内存高比特位
小端序:内存低比特位 10000000 00000000 00000000 00000000 内存高比特位
三、判定方法
typedef struct tagRegion{
unsigned char region1:1;
unsigned char region2:6;
unsigned char region3:1;
} REGION;
union {
REGION bb;
unsigned char aa;
} cc;
int main(int argc, char* argv[])
{
cc.bb.region1 =1;
printf("Hello World! %d/n",cc.aa); //打印1表示小端,打印128表示大端。
return 0;
}
static unsigned char isBigEndian()
{
const unsigned short test= 0xFF00;
return *((unsigned char *) &test);
};
使用以下方式更简洁一些:
1 #include
2 using namespace std;
3
4 int main(int argc, char **argv)
5 {
6 short s = 0x0102;
7 if((*(unsigned char*)&s) == 2)
8 cout<
9 else if((*(unsigned char*)&s) == 1)
10 cout<
11 else
12 cout<
13
14 return 0;
15 }