如何测试你的系统是大端还是小端模式

来源:互联网 发布:papi酱变音软件 编辑:程序博客网 时间:2024/03/29 18:32

我们先来看看为什么会有大小端之分呢?

在计算机系统中,规定:每个地址单元都会对应一个字节(8个bit),但是,在c语言中,除了有一个字节(8个bit)的char,也有两个字节(16个bit)的short,也有四个字节(32个bit)的long(在不同的编译器下可能不同)。对于16位或者32位的处理器,即就是大于8位的处理器,由于寄存器的宽度大于一个字节,那么就存在如何将一个多字节的变量的数据如何存放的问题——所以,就有了大小端之分。

首先,应该明确的是:

数据有高位和低位之分
地址有低地址和高地址之分

大小端的理解:

小端:将数据的低位存放在低地址处,将数据的高位存放在高地址处。
大端:将数据的低位存放在高地址处,将数据的高位存放在低地址处。

方法一:使用联合体测试:

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>int CheckSystem(){    union check    {        int i;        char ch;    }c;    c.i = 1;    return (c.ch == 1);}int main(){    int ret = CheckSystem();    printf("ret : %d\n",ret);    system("pause");    return 0;}

程序的解析:
这里写图片描述

方法二:

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>int CheckSystem(){    int a = 1;    if (*((char *)(&a)) == 1)    {        return 1;    }    return 0;}int main(){    int ret = CheckSystem();    printf("ret : %d\n",ret);    system("pause");    return 0;}

这里写图片描述

方法三:

这里写图片描述

大小端的问题其实就是看数据在内存中是如何存放的,低位的数据是在低地址还是在高地址处存放的,所以无论多少种方法,实现的思想都是一样的。

0 0