大小端定义
大端:是指数据的高字节保存在内存的低地址中
小端:是指数据的低字节保存在内存的低地址中
思路:
定义一个拥有一个char,int类型的联合体
union
{
char ch;
int integer;
}un;
当系统为大端时,这个联合体的内存布局为
高地址----------->低地址
char: xx
int: xx xx xx xx
当系统为小端时,这个联合体的内存布局为
char: xx
int: xx xx xx xx
由于联合体共享内存,所以当char类型的成员的地址为int类型成员的低地
址时,系统为小端,所以当char类型的成员的地址为int类型成员的高地址
时,系统为大端。
[kiosk@foundation36 ~]$ vim test.c
1 #include <stdio.h>
2
3 union
4 {
5 char ch;
6 int integer;
7 }un;
8
9 int main()
10 {
11 un.integer = 0x12345678;
12 if(un.ch == 0x12)
13 {
14 printf("big\n");
15 }
16 else
17 {
18 printf("short\n");
19 }
20 return 0;
21 }
[kiosk@foundation36 ~]$ gcc -o test test.c
[kiosk@foundation36 ~]$ ./test
short
第二种方法
#include<stdio.h>
union var{
char c[4];
int i;
};
int main(){
union var data;
data.c[0] = 0x04;//因为是char类型,数字不要太大,算算ascii的范围~
data.c[1] = 0x03;//写成16进制为了方便直接打印内存中的值对比
data.c[2] = 0x02;
data.c[3] = 0x11;//数组中下标低的,地址也低,按地址从低到高,内存内容依次为:04,03,02,11。总共四字节!
//而把四个字节作为一个整体(不分类型,直接打印十六进制),应该从内存高地址到低地址看,0x11020304,低位04放在低地址上。
printf("%x\n",data.i);
}
网友评论