判断机器大小端的两种实现方法
大端模式(Big-endian):
是指数据的低位(就是权值较小的后面那几位)保存在内存的高地址中,而数据的高位,保存在内存的低地址
中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;
小端模式(Little-endian):
是指数据的低位保存在内存的低地址中,而数 据的高位保存在内存的高地址中,和我们的逻辑方法一致。
判断大小端方法:1、利用指针强制类型转换; 2、利用共用体所有数据共用同一块地址空间
1、利用指针强制类型转换
- #include<stdio.h>
- int main()
- {
- int a = 1;
- char * p = (char*)&a;
- if (*p == 1)
- {
- printf("little-endian");
- }
- else
- {
- printf("big-endian");
- }
- return 0;
- }
如果小端方式中(i占至少两个字节的长度)则i所分配的内存最小地址那个字节中就存着1,其他字节是0;大端的话则1在i的最高地址字节处存放。char是一个字节,所以强制将char型量p指向i则p指向的一定是i的最低地址,那么就可以判断p中的值是不是1来确定是不是小端。
2、利用共用体所有数据共用同一块地址空间
- #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;
- }
原文:https://blog.youkuaiyun.com/My_heart_/article/details/51702277