大端和小端

简介:

     大端和小端

    嵌入式开发者应该对大端和小端很熟悉。在内存单元中数据是以字节为存储单位的,对于多字节数据,在小端模式中,低字节数据存放在低地址单元,而在大端模式中,低字节数据存放在高地址单元。比如一个定义一个short型的变量a,赋值为1,由于short型数据占2字节。

在小端模式中,其存放方式为

0X4000  00000001

0X4001  00000000

而在大端模式中,其存放方式为

0X4000  00000000

0X4001  00000001

若需用程序验证系统是大端模式还是小端模式(一般我们用的x86结构的都是小端模式),有两种方法

1.利用联合体的性质

    因为联合体中的成员是共享内存的,并且数据是从低地址存放的,可以利用这一性质判断。

复制代码
typedef union 
{
    char a;
    short c;
}U;

int checkCPU1()  //若是小端则返回1,否则返回0 
{
    U u;
    u.c=1;
    //printf("%d\n",u.a);
    return u.a==1;
}
复制代码

由于short占2字节,而char占1字节,当对c赋值为1时,若系统为小端模式,则在系统中存放方式为:

000000001

000000000

那么当取a的值时,a的整型值必定为1;否则为0.

2.强制取低地址单元的数据

复制代码
int checkCPU2()
{
    short a=0x1234;
    char *p=(char *)&a;
    //printf("%d\n",*p);
    return *p==0x34;    
} 
复制代码

很显然,若是小端模式,指针p指向的单元里面的数据整型值必为0x34,否则为0x12。

测试程序:

复制代码
/*测试系统大端模式/小端模式 2011.10.1*/ 

#include <iostream>
using namespace std;

typedef union 
{
    char a;
    short c;
}U;

int checkCPU1()  //若是小端则返回1,否则返回0 
{
    U u;
    u.c=1;
    //printf("%d\n",u.a);
    return u.a==1;
}

int checkCPU2()
{
    short a=0x1234;
    char *p=(char *)&a;
    //printf("%d\n",*p);
    return *p==0x34;    
} 

int main(int argc, char *argv[])
{
    printf("%d\n",checkCPU1());
    printf("%d\n",checkCPU2());
    return 0;
}
复制代码

相关文章
|
5月前
|
存储
计算机存储,字节分为大端和小端
计算机存储,字节分为大端和小端
81 1
|
5月前
|
存储 网络协议 API
大端与小端概念、多字节之间与单字节多部分的大小端转换详解
大端与小端概念、多字节之间与单字节多部分的大小端转换详解
353 1
|
存储 C语言
大端存储和小端存储
1.大小端字节序 2.大端存储 3.小端存储 4.为什么会有大小端存储模式之分? 5.如何判断当前机器是大端存储还是小端存储 方法1 方法2
2877 0
|
5月前
大端法和小端法
大端法和小端法
43 2
|
存储
大端法与小段法的区别
大端法与小段法的区别
215 0
|
存储 小程序 编译器
C语言:大小端字节序存储
大端字节序存储模式:把一个数据低位字节处的数据存放在高地址处,数据高位字节处的数据存放在低地址处
96 0
|
存储 编译器 C语言
大小端字节序和整型提升
大小端字节序和整型提升
|
存储 编译器 C语言
【大小端问题】
大小端是什么? 计算机在内存存储中有两中存储模式: 大端字节序存储模式和小端字节序存储模式。 大端存储模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中。 小端存储模式,是指数据的低位保存在内存的低地址中,而数据的高位,保存在内存的高地址中。
|
存储 C语言
【C语言】大小端字节序问题
一、大小端字节序问题 大小端是由CPU决定的,大小端可以理解为字节顺序,所以大小端全称叫大端字节序、小端字节序。其实大端、小端这两个词是从《格列佛游记》里出来的。《格列佛游记》有一段讲的是吃鸡蛋是从大的那头敲开还是小的那头敲开的问题,书中把从大头敲开的那种叫做大端,把从小头敲开的那种叫小端,第一个指出计算机数据存储顺序问题的人就采用了这个大小端的说法。
|
存储 编译器 C语言