栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

筑基

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

筑基

筑基_C_1_大小端模式判断
  • 1.1 数据在内存中的存储模式
  • 1.2 C程序:判断大小端模式
  • 1.3 x86-64 是“小端模式”
  • 1.4 MCS-51&Keil是“大端模式”

1.1 数据在内存中的存储模式

数据:0xAB123450

设:内存地址向上生长 0000H ~ FFFFH

  • 大端模式 (Big Endian)
    存储单元地址增长:
0x01000x01010x01020x0103
AB123450
  • 小端模式 (Little Endian)

存储单元地址增长:

0x01000x01010x01020x0103
503412AB

现在大多数计算机存储数据的形式都是“小端模式”。如今好多处理器都可以支持“双端模式”,既可以配置成“大端模式”,又可以配置成“小端模式”;但是大多数操作系统都是运行在“小端模式”的。

在进行单片机汇编程序设计时,请根据实际情况选择数据在内存中的存储模式!不同的单片机和搭配不同的编译器,其数据的存储模式是不一样的!

1.2 C程序:判断大小端模式

定义存储模式枚举类型:

typedef enum tag_Endian {
    BIG_ENDIAN = 0,
    LITTLE_ENDIAN = 1,
} EndianTypeDef;

判断大小端模式的函数实现:

EndianTypeDef check_endian ()
{
    EndianTypeDef mode = LITTLE_ENDIAN;
    uint16_t test_dat = 0x0001;

    if ( ( (char *)(&test_dat) )[1] == 0x01 ) {
        mode = BIG_ENDIAN;
    }

    return mode;
}

在标准输出设备上打印大小端模式:

void show_memory_mode ()
{
    EndianTypeDef mode;
    mode = check_endian();
    printf ("Endian mode in this machine is "%s". rn", 
            (mode == LITTLE_ENDIAN) ? 
                    "Little-Endian" : 
                    "Big-Endian");
}
1.3 x86-64 是“小端模式”
int main(int argc, char *argv[])
{
    show_memory_mode();

    return 0;
}

VSCode&Mingw-w64开发环境测试:

1.4 MCS-51&Keil是“大端模式”
void show_memory_mode()
{
    if ( Little_Endian == check_memory_mode() ) {
        printf("MCS-51: Little-Endianrn");
    } else {
        printf("MCS-51: Big-Endianrn");
    }
}

Proteus仿真结果:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/347148.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号