1 . 小端和大端的定義
假設x位模式爲:[X31, X30, ..., X0],總共32位。定義最高有效字節(Most Significant Byte, MSB)爲[X31, X30, ..., X24],最低有效字節(Least Significant Byte, LSB)爲[X7, X6, ..., X0]。某些機器上x按照從LSB到MSB排列,而另外一些機器則按照從MSB到LSB排列。我們把前一種方式稱作小端法(Little endian),即最低有效字節LSB在低地址;把後一種方式稱作大端法(Big endian),即最高有效字節MSB在低地址。
假設x = 0x12345678,&x = 0x00。則x的字節在小端和大端機器上的內存分佈如下小端 大端
------- -------
0x12 <-地址0x03-> 0x78
------- -------
0x34 0x56
------- -------
0x56 0x34
------- -------
0x78 <-地址0x00-> 0x12
------- -------
2. 小端和大端的檢測方法
根據小端和大端的定義,只需比較低地址(或高地址)和預期是否一致即可。
bool IsLittleEndian() { int x = 0x12345678; char c = *(char *)&x; if (c == 0x78) return true; else return false; }
整數x在內存中的地址爲0x0012FE88,內存佈局情況如下:
0x0012FE84 cc cc cc cc
0x0012FE88 78 56 34 12
0x0012FE8C cc cc cc cc
可以看到低地址的值爲0x78,高地址的值爲0x12。