計算機的字節序“大端”和“小端”

很多書籍中會提到“大端”和“小端”的說法。所謂“大端”和“小端”存儲指的是計算機中多於一個字節的數據在內存中的存放方式。某些機器選擇在存儲器中按照從最低有效字節到最高有效字節的順序存儲對象,而另一些機器則按照從最高有效字節到最低有效字節的順序存儲。前一種規則—最低有效字節在最前面的方式,稱爲小端法(little endian)。大多數Intel 兼容機都採用這種規則。後一種規則—最高有效字節在最前面的方式,稱爲大端法(big endian)

例如:一個int類型的值0x12345678,在32位計算機中佔4個字節。假設其在內存中的地址爲:0x101~0x103,那麼大端法和小端法表示分別爲:

目前大多數的計算機使用的都是“小端”法

而網絡字節序使用的是(big endian)大端法


可以使用c代碼來驗證,下面的c程序實現把int類型數據各字節的值依次打印出來


#include <stdio.h>

typedef unsigned char *byte_pointer;

void show_bytes(byte_pointer start,int len)
{
	int i;
	for(i = 0; i < len; i++)
	{
		printf("%.2x",start[i]);
		printf("\n");
	}
}

void show_int(int x)
{
	show_bytes((byte_pointer)&x,sizeof(int));
}

void test_show_bytes(int val)
{
    int ival = val;
    show_int(ival);
}

調用test_show_bytes(12345)的輸出結果如下圖:


十進制 12345的十六進制表示爲0x3039,輸出結果39 30 00 00 是從低位到高位依次打印出數據,可以看出所使用的計算機字節序爲小端存儲。

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