一、基础知识
最高内存地址 0xFFFFFFFF
栈区(从高内存地址,往低内存地址发展。即栈底在高地址,栈顶在低地址)
堆区(从低内存地址 ,往 高内存地址发展)
最低内存地址 0x00000000
二、什么是字节序
字节序,简单来说,就是指的超过一个字节的数据类型在内存中存储的顺序,那么就很明显了,像char这样的类型,肯定不存在字节序的问题了。
例如:0x12345678,其中0x12为高地址位,0x78为低地址位。
三、字节序分为哪几类
1.大端字节序:
高位字节数据存放在低地址处,低位数据存放在高地址处;
2.小段字节序:
高位字节数据存放在高地址处,低位数据存放在低地址处;
如图
四、大小字节序的判断:
方法 一:
#include <stdio.h>
15
16 int main (int argc, char **argv)
17 {
18 unsigned int a = 0x12345678;
19 unsigned char *c = (unsigned char *)&a;
20
21 if(*c == 0x78)
22 printf("Little endian\n");
23 else if(*c == 0x12)
24 printf("Big endian\n");
25 else
26 printf("Not know");
27 return 0;
28 }
方法二:
14 #include <stdio.h>
15 union u_is_lsb
16 {
17 unsigned int a;
18 unsigned char b;
19 }is_lsb;
20 int main (int argc, char **argv)
21 {
22 is_lsb.a = 0x12345678;
23 if(is_lsb.b == 0x78)
24 printf("Little endian!\n");
25 else if(is_lsb.b == 0x12)
26 printf("Big endian!\n");
27 else
28 printf("Not know!");
29 return 0;
30 }
五、网络字节序:
TCP/IP协议传输数据时,字节序默认大端。