数据在 内存 中的 存储顺序 都是 从 低地址 向 高地址 存储的 (首地址 指 编号较少的 地址编号) 例 存储 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
结论:小端法在内存中分布 将数据最低有效为放在内存的低地址
数据的访问 从地址空间的低地址开始,向高地址访问