一.为什么有大小端
因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8bit。而例如在C语言中short占2个字节,那大小端则决定了这两个字节在系统中存放的顺序。
二.什么是大小端
1)小端(little-endian)就是高字节放在内存的高地址端
2)大端(big-endian)就是高字节放在内存的低地址
例如数字0x1234,这里0x12占的字节是高字节,在小端模式中它放在内存的高地址,如下:
低地址------>高地址
0x34 | 0x12
而在大端模式中,则如下:
低地址------>高地址
0x12 | 0x34
总的来说如果一张纸代表内存,纸的左上角是最小地址,我们平时写字的习惯就是大端模式,即把高字节写在低地址。
三.注意
数组不会存在大小端问题,大小端决定的是字节数大于等于2的类型的字节存放顺序。故下列代码此时的输出一定B,和大小端无关。:
char str[] ="AB";
char* pStr = str;
pStr++;
print("%c",*pStr);
而字节则不一样,如下只有在大端的计算机上才显示“big”:
unsigned int num = 0x12345678;
char str = *(char*)#
if (str == 0x78) {
cout << "big" << endl;
}