打印
[DSP编程]

大小端模式

[复制链接]
896|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
蒋博1026|  楼主 | 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");
    }
}

使用特权

评论回复

相关帖子

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

使用特权

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

使用特权

评论回复
地板
airwill| | 2019-12-16 22:33 | 只看该作者
于是乎一个32位的二进制在内存存储时有2种分布方式:高字节对应低地址(大端模式)、高字节对应高地址(小端模式)
开始学习时, Keil C51 的大端模式曾经折磨了一夜

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

323

主题

1827

帖子

18

粉丝