你的机器是大端还是小端?

来源:互联网 发布:港股实时行情软件 编辑:程序博客网 时间:2024/04/27 05:19


你的机器是大端还是小端?——测试一下你就知道。

大端模式(Big-endian):


是指数据的低位(就是权值郊县的后面那几位)保存在内存的高地址中;

而数据的高位,保存在内存的低地址中。

这样的恶存储方式有点儿类似把数据当做字符串顺序处理:地址由小向大增加,而数据从高位往低位放。

小端模式(Little-endian):


是指数据的低位保存在内存的低地址中;

而数据的高位保存在内存的高地址中,和我们的逻辑方式一致。

补充一些知识点:


1、内存的地址:从左往右、从上往下依次增大;

2、数据:左边是高位,右边是低位。

判断是大小端的方法:


1、利用指针强制类型转换;

2.、利用共用体所有数据共用同一块地址空间

具体实现:


第一种方法:利用指针进行强制类型转换

#include<stdio.h>int check_endian(int a){char *p = (char*)&a;//用指针p强制让它指向a的低地址,才能知道p拿到的是a的低位还是高位。if (*p == 1){ printf("你的机器是 Little-endian"); }else{printf("你的机器是 Big-endian");}return 0;}int main(){int a = 1;check_endian(a);return 0;}


第二种方法: 利用共用体所有数据共用同一块地址空间

#include<stdio.h>union A{char c;//内存按字节存储int a;}A;int main(){A.a = 1;     //共用体占用的内存大小是最大元素所占内存大小if (A.c==1){printf("你的机器是 Little-endian");}else{printf("你的机器是 Big-endian");}return 0;}

联合体union的存放顺序是所有成员都从低地址开始存放,所以很容易就判别出机器的大小端了。















0 0
原创粉丝点击