大端和小端

简介:

     大端和小端

    嵌入式开发者应该对大端和小端很熟悉。在内存单元中数据是以字节为存储单位的,对于多字节数据,在小端模式中,低字节数据存放在低地址单元,而在大端模式中,低字节数据存放在高地址单元。比如一个定义一个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;
}
复制代码
相关文章
|
Java 开发工具
【GDAL-java的四个常用代码示例】
【GDAL-java的四个常用代码示例】
487 0
|
安全 JavaScript Java
汉服|高校汉服租赁网站|基于Springboot的高校汉服租赁网站设计与实现(源码+数据库+文档)
汉服|高校汉服租赁网站|基于Springboot的高校汉服租赁网站设计与实现(源码+数据库+文档)
453 0
|
4月前
|
供应链 监控 API
亚马逊商品详情API响应数据解析
本教程介绍如何使用亚马逊商品详情API(如Product Advertising API或SP-API),通过ASIN或关键词查询商品信息。支持获取价格、库存、评价等50多个字段,适用于价格监控、竞品分析和供应链管理。提供Python请求示例代码,实现商品数据安全高效获取。
|
9月前
|
人工智能 关系型数据库 分布式数据库
阿里云PolarDB重磅发布云原生与Data+AI新特性,打造智能时代数据引擎
阿里云PolarDB重磅发布云原生与Data+AI新特性,打造智能时代数据引擎
538 0
|
SQL
LEFT JOIN
【11月更文挑战第07天】
342 3
|
域名解析 网络协议 数据安全/隐私保护
TCP/IP配置
【10月更文挑战第20天】TCP/IP配置
578 1
|
Java Spring 容器
Spring底层原理之 BeanFactory 与 ApplicationContext
Spring底层原理之 BeanFactory 与 ApplicationContext
192 3
|
存储 传感器 定位技术
Landsat系列卫星遥感影像数据USGS中批量下载多张图像的方法
Landsat系列卫星遥感影像数据USGS中批量下载多张图像的方法
366 1
|
缓存 NoSQL MongoDB
MongoDB数据库查询性能提高40倍?
MongoDB数据库查询性能提高40倍?
529 0
|
数据管理 数据挖掘 API
DingTalk「开发者说」钉钉连接平台,在宜搭场景下如何使用钉钉连接器
钉钉连接平台通过简单的低代码配置,帮助企业迅捷实现系统集成和连接,降低集成实施的周期和成本。本文主要介绍在宜搭场景下如何使用钉钉连接器。
4611 0
DingTalk「开发者说」钉钉连接平台,在宜搭场景下如何使用钉钉连接器