(未完)大端模式 vs. 小端模式

1 . 小端和大端的定義

我們知道,字節是計算機上最小的存儲器尋址單位,而不是位。在幾乎所有的機器上,多字節對象都被存儲爲連續的字節序列,對象的地址爲所使用字節中最小的地址。比如有int型變量x,x的地址&x = 0x00,那麼x的4個字節在存儲器中的位置將是0x00,0x01,0x02和0x03。

假設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。

3. 網絡字節順序


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章