【ARM 嵌入式 C 入门及渐进 8-- Linux CPU大小端介绍及判断方法】

文章介绍了计算机内存中的大小端模式,大端模式将高字节保存在低地址,小端模式则相反。X86架构通常采用小端模式,而KEILC51使用大端模式。文中提供了两种检测系统大小端的方法,包括通过比较内存中的字节顺序和利用union。此外,一些ARM处理器可以在运行时切换大小端模式。
摘要由CSDN通过智能技术生成

1.1 大小端概念

大端模式(Big-endian),是指数据的高字节,保存在内存的低地址中,而数据的低字节,保存在内存的高地址中。
小端模式(Little-endian),是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来。

我们常用的 X86 结构是小端模式,而 KEIL C51则为大端模式。很多的ARM,DSP 都为小端模式。

有些ARM处理器还可以随时在程序中(在ARM Cortex 系列使用REV、REV16、REVSH 指令 [1] )进行大小端的切换。

1.1.1大小端判断方法一

#define TRUE 1
#define FALSE 0

int is_bigendian()
{
    int  i = 1;            // i = 0x00000001
    char  c = *(char *)&i; // 注意不能写成 char c = (char)i;
    return  (int )c != i;
}

如果是 little endian 字节序 i = 1;的内存从低到高依次放的是:0x01 0x00 0x00 0x00
按照 i 的起始地址变成按照 char * 方式(1字节)存取,从低地址开始取值,即得 c = 0x01;反之亦然。

1.1.2 大小端判断方法二

Cunion 里面的成员char cint i 都是从低地址开始对齐的,所以如果是小端模式低地址的值为 0x2, 若果是大端模式低地址的值是 0x0

int is_bigendian()
{
    union {
      int i;
      char c;
    } test;
    
    test.c = 0x2;
    return  test.i != 2; //不等于2,返回true,是大端模式
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

主公CodingCos

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值