找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4016|回复: 0
收起左侧

单片机存储中的大小端格式

[复制链接]
ID:582135 发表于 2019-7-11 10:30 | 显示全部楼层 |阅读模式

嵌入式开发者应该对大小端模式都非常了解,特别是我们在做通信时,数据的大小端存储方式不同会对我们影响很大!!!下面我们来分析一下单片机中的大小端格式:
大端格式:即低地址存高位数据
小端格式:即低地址存低位数据
举个例子:
首先声明一个int变量 a = 0x12345678; a的地址为0x00600000;
那么以小端存储为:
        0x00600000  0x78;
        0x00600001  0x56;
        0x00600002  0x34;
        0x00600003  0x12;
若以大端方式存储:
        0x00600000  0x12;
        0x00600001  0x34;
        0x00600002  0x56;
        0x00600003  0x78;
1.下面介绍两种检测大小端格式的方法:
(1)采用共用体的方式

union MyUnion{        
    int  a;        
    char b;}myunion;    myunion.a = 1;   
    printf((myunion.a == myunion.b) ? "小端格式" : "大端格式");
(2)采用指针方式
    int c = 1;   
    printf((*((unsigned char*)&c) == 1) ? "小端格式" : "大端格式");
2.再附上两个大小端转换的函数:
//32位大小端转换
void switch32(unsigned int *da){    *da = (*da & 0xFF000000) >> 24        | (*da & 0x00FF0000) >> 8        | (*da & 0x0000FF00) << 8        | (*da & 0x000000FF) << 24;}
//16位大小端转换
void switch16(unsigned short *da){    *da = (*da & 0xFF00) >> 8        | (*da & 0x00FF) << 8;}
以上就是我们嵌入式通常遇到的大小端存储问题,有兴趣可以拷贝这几段代码亲自试一试哦。如果喜欢请点关注哦。

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表