資料在 記憶體 中的 存儲順序 都是 從 低位址 向 高位址 存儲的 (首位址 指 編号較少的 位址編号) 例 存儲 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
結論:小端法在記憶體中分布 将資料最低有效為放在記憶體的低位址
資料的通路 從位址空間的低位址開始,向高位址通路