关闭

判断机器大小端模式

标签: 大小端判断嵌入式开发大小端模式介绍
299人阅读 评论(0) 收藏 举报
分类:

简单介绍一下大小端模式:

         像内核开发,网络开发,以及嵌入式开发都要涉及以位为单位来操作,所以都要考虑大小端问题。

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

这里写图片描述

介绍三种判断本机大小端模式的程序:

① 通过位移操作

#include <stdio.h>
#include <stdlib.h>

#define panduan(x) (x>>1)?(printf("It is big endian\n")):(printf("It is litter endian\n"))
int main()
{
    char a = 1;
    panduan(a);
    printf("%#x\n",a);
    printf("%#x\n",a>>1);
    return 0;
}

这里写图片描述

地址: 高地址 <<====== 低地址
小端模式存放:0000 0001 >> 1 == 0000 0000
大端模式存放:1000 0000 >> 1 == 0100 0000

② 通过数据类型强制转换

#include <stdio.h>
#include <stdlib.h>

//#define panduan(x) (x>>1)?(printf("It is big endian\n")):(printf("It is litter endian\n"))
int main()
{
    unsigned short a = 1;
    char c = (char)a;
    //panduan(a);
    //printf("%#x\n",a);
    //printf("%#x\n",a>>1);
    printf("%#x\n",a);
    printf("%#x\n",c);
    (c)?(printf("It is litter endian\n")):(printf("It is big endian\n"));
    return 0;
}

这里写图片描述

数据类型强制转换,其实本质还是取低8位数来判断。

③ 通过共同体

#include <stdio.h>
#include <stdlib.h>
//#define panduan(x) (x>>1)?(printf("It is big endian\n")):(printf("It is litter endian\n"))

typedef union test{
    int a;
    char c;
}czg;
int main()
{
    czg t;
    t.a = 1;
    //unsigned short a = 1;
    //char c = (char)a;
    //panduan(a);
    //printf("%#x\n",a);
    //printf("%#x\n",a>>1);
    //printf("%#x\n",a);
    //printf("%#x\n",c);
    printf("%#x\n",t.a);
    printf("%#x\n",t.c);
    //(c)?(printf("It is litter endian\n")):(printf("It is big endian\n"));
    (t.c)?(printf("It is litter endian\n")):(printf("It is big endian\n"));
    return 0;
}

这里写图片描述

和②本质上是一样的。
       共用体里面的成员共用一个内存空间,而且是从低位开始占用,共用体变量的内存空间大小是该变量中某个占用空间最大的那个成员所占的空间。比如上面的结构体变量的空间就是int a占空间的大小,char c是从低位开始占用,也就是占用int a的低8位

1
0
查看评论

判断机器的大小端模式

大端: 数据的高字节在低地址 , 数据的低字节在高地址 小端:数据的低字节在低地址,数据的高字节在高地址 采用联合体的方法来确定大小端 #include using namespace std; union A { char c[2]; short s; }; void m...
  • dahai_881222
  • dahai_881222
  • 2012-09-25 09:31
  • 585

判断机器大小端的两种实现方法

大端模式: 是指数据的低位(就是权值较小的后面那几位)保存在内存的高地址中,而数据的高位,保存在内存的低地址 中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放; 小端模式: 是指数据的低位保存在内存的低地址中,而数 据的高位保存在内存的高地址中,和我们的...
  • My_heart_
  • My_heart_
  • 2016-06-17 19:42
  • 1986

大小端模式及其判断

计算机领域讨论的大小端,其实就是存储系统存放数据的方式
  • qq_28992301
  • qq_28992301
  • 2016-11-23 21:12
  • 634

判断大小端模式

判断大小端模式        学C语言时,了解过大小端模式,但是一直都每怎么理解,对于网上查到的各种判断大小端的程序也是看的一知半解。最近再次看到大小端这个问题时,终于感觉顿悟了。以下是我的理解,如有错的地方请指出。       ...
  • lyh__521
  • lyh__521
  • 2015-03-15 17:39
  • 615

大小端模式判断

<br />int checkCPUendian()<br />{<br /> union<br /> {<br />  unsigned int a;<br />  ...
  • yinhuan99
  • yinhuan99
  • 2010-11-25 08:38
  • 107

CPU架构决定大小端模式

不同体系结构的CPU,数据在内存中存放的排列顺序是不一样的。 存储器中对数据的存储是以字节(Byte)为基本单位的,因此,字(Word)和半字(Half-Word)在存储器中就有两种次序,分别称为:大端模式(Big Endian)和小端模式(Little Endian)。 大端存储模式是指字或半...
  • yiyeguzhou100
  • yiyeguzhou100
  • 2015-09-11 23:23
  • 1113

什么是大小端模式,写个程序判断本机是大端还是小端模式

面试常见问题:什么是大小端?写个程序判断本机是大端格式还是小端格式?先来简单的讲下什么是大小端模式,以及两个模式的区别:所谓大小端模式就是存储数据时,数据的高低位怎么存储在地址的高低位上。(位指的是bit,一个char类型数据有8位) 大端模式:数据的高位,存放在地址的低位。(高位存...
  • YuZhiHui_No1
  • YuZhiHui_No1
  • 2014-08-09 15:11
  • 2981

判断CPU大小端模式

/* * 判断CPU大小端模式 * CPU: Intel (R) CPU T2050 @ 1.60GHz * OS: Windows XP * Compiler: Visual C++ 2008 Express Edition * Programming Language: C * Time: 19...
  • programs
  • programs
  • 2009-12-09 19:47
  • 793

判断系统大小端模式

端模式(Endian)的这个词出自Jonathan Swift书写的《格列佛游记》。这本书根据将鸡蛋敲开的方法不同将所有的人分为两类,从圆头开始将鸡蛋敲开的人被归为Big Endian,从尖头开始将鸡蛋敲开的人被归为Littile Endian。小人国的内战就源于吃鸡蛋时是究竟从大头(Big-End...
  • thebirdofwonder
  • thebirdofwonder
  • 2009-04-26 12:11
  • 900

判断大小端模式与共用体

//共用体 #include union A //union是C语言一个关键字,声明一个共用体类型变 { int a; char ch; }; int main() { union A a; a.a = 5; a.ch = 1; printf("%p,%p,%p\n&quo...
  • xngjing
  • xngjing
  • 2017-07-21 22:47
  • 73
    个人资料
    • 访问:447342次
    • 积分:8765
    • 等级:
    • 排名:第2628名
    • 原创:324篇
    • 转载:12篇
    • 译文:89篇
    • 评论:118条
    【目录索引】

    闲适音乐

    博客专栏
    最新评论

    Email: 457086306@qq.com