天天看點

大端法與小端法簡介及應用

資料在  記憶體 中的 存儲順序 都是  從  低位址  向 高位址  存儲的  (首位址 指  編号較少的  位址編号) 例   存儲 4個char   (a1, a2, a3, a4),則  第一個到 第四個 所占的  存儲空間位址 依次為  0x101, 0x102, 0x103, 0x104   大端發,小端法 指的是  多位元組的資料(int,float)在記憶體中  所占空間的  位址順序   如  x (int)  位于 0x100  (指  首位址 的編号  )處,其值 0x01234567  所在 位址空間為 0x100~0x103 的位元組   大端法     0x100      0x101     0x102    0x103      ( 高位 在  首位址處,即編号較少的位址空間)     (IBM,SUN 大型機   大部分)                    01           23           45        67 小端法        67           45            23        01         ( 低位 在 首位址處,即編号較少的位址空間)       (intel 等pc機   大部分)

測試代碼

#include <stdio.h>

typedef unsigned char *byte_pointer;

void show_byte(byte_pointer str, int len)
{
	int i;
	for(i = 0; i < len; i++)
		printf("%c", str[i]);
	printf("end\n");
}

void show_int(int num)
{
	show_byte((byte_pointer)&num, sizeof(int));
}

int main()
{
	int i = 98;
	byte_pointer str = "good day";
	show_byte(str, 8);
	show_int(97);
	show_int(24930);	

	return 0;
}
           

結果:

good dayend

a   end

ba     end

b       end

為了便于觀察字元的記憶體分布,添加了"end"

show_int(97);

由小端法知 97在4位元組在記憶體的分布  從低位到高位 為   97  0   0  0

 結果  a     end  可看出,字元串列印從 指針所指位址 (變量的低位位址為起始位址)開始列印 

同理

show_int(24930);    24930 對應 4位元組十六進制 0x00006162           0x61 (97)為'a'的 ansic碼, 0x62(98)為'b'的 ansic碼

其内容分布 從低位到高位為   98   97  0   0

是以結果為  ba   end

結論:小端法在記憶體中分布 将資料最低有效為放在記憶體的低位址

資料的通路 從位址空間的低位址開始,向高位址通路

繼續閱讀