您的位置:首页 > 编程语言 > C语言/C++

[置顶] 【C语言】 检测大小端存储

2016-05-26 12:25 633 查看
[code=cpp;toolbar:false">#include <stdio.h>

int sys_check()
{
    int i = 1;
    char *pi = (char *)&i;  //强制类型转换为char *,取首字节的内容,用以判断条件
    //if (1 == *(char *)&i)
    if (*pi == 1)
    {
return 1;
    }
    else
    {
return 0;
    }
}
int main()
{
    int ret = sys_check();
    if (ret == 1)
    {
printf("little\n");  //小端存储
    }
    else
    {
printf("big\n");  //大端存储
    }
    return 0;
}

此外,可以使用联合体(共用体) union:
封装另一个共同功能的函数:
(main函数缺省)

int sys_check()
{
union UN
    {
int i;
char c;
    }un;
    un.i = 1;
    if (un.c == 1)
    {
return 1;//返回1表示小端
    }
    else
    {
return 0;//返回0表示大端
    }

}

上面是以 1 为例判断,以下是详细对大小端存储的解释:

一、大端模式:低位字节排放在内存的高地址端,高位字节在内存的低地址端

二、小端模式:低位字节排放在内存的低地址端,高位字节在内存的高地址端

三、一个整型数字,0x12345678在内存里的存储方式,

a 大端模式

  0x12  0x 34 0x56  0x78
  低地址           → 高地址

  b小端模式

    0x78  0x 56 0x34  0x12
  低地址           → 高地址
 
*** 大端模式的内存存储与字符串存储类似,小端模式则相反

四、若起始地址为0x8000,则0x12345678的存储情况为
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: