详解大小端

一.为什么有大小端

因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为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;

}

你可能感兴趣的:(详解大小端)