打印

[DSP编程] 大小端模式

[复制链接]
182|2
跳转到指定楼层
楼主
 楼主 | 2019-11-25 09:22 | 只看该作者 |退出气泡模式 回帖奖励 |倒序浏览 |阅读模式
什么是大小端模式
(1)大端模式(big endian)和小端模式(little endian)
(2)在计算机通信发展起来后,遇到一个问题就是:在串口通信中,一次只能发送一个字节。如果要发送一个int类型的数据就会有
一个问题。int类型有四个字节,我是按照byte0 byte1 byte2 byte3这样的方式发送,还是按照byte3 byte2 byte1 byte0这样的顺序
发送。规则就是发送方和接收方必须按照同样的字节顺序来通信,否则就会出现错误。
(3)现在所说的大小端模式,更多的是指计算机存储系统的大小端。因为存储系统是32位的,但是数据仍然是按照字节为单位的。
于是乎一个32位的二进制在内存存储时有2种分布方式:高字节对应低地址(大端模式)、高字节对应高地址(小端模式)
(4)所以我们在写代码时,当不知道当前环境是用大端模式还是小端模式的时候,就需要用代码来检测当前系统的大小端。
#include <stdio.h>
//共用体中很重要的一点:a和b都是从u1的低地址开始的。
union myunion
{
    int a;
    char b;
};
int is_little_endian(void)
{
    union myunion u1;
    u1.a = 1;           //地址0的那个字节,小端模式会放1,大端模式会放0
    return u1.b;
}
int is_little_endian2(void)
{
    int a = 1;
    char b = *(char *)(&a);  //指针方式是共用体方式的本质
    return b;
}
int main(void)
{
    int i = is_little_endian();
    if(i == 1)
    {
        printf("小端模式.\n");
    }      
    else
    {
        printf("大端模式.\n");
    }
}

使用特权

评论回复
沙发
| 2019-11-25 22:23 | 只看该作者
学习了   非常有用

使用特权

评论回复
板凳
| 2019-12-2 16:28 | 只看该作者
学习了,常用的51就是大端模式了,深刻记录一下

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

快3注册邀请码tt 平泉县| 石景山区| 镇原县| 内黄县| 宁波市| 宁津县| 乐至县| 兴城市| 福安市| 石台县| 肥东县| 林口县| 辽中县| 沁水县| 泸水县| 常德市| 淳安县| 德格县| 安泽县| 乐山市| 和林格尔县| 天水市| 云浮市| 安泽县| 兰溪市| 庆云县| 大田县| 米易县| 个旧市| 浑源县| 明水县| 西乌珠穆沁旗| 乾安县| 海兴县| 阿克苏市| 白河县| 娱乐| 镇坪县| 滁州市| 大关县| 安远县|