前言

这是一个古老而基础的问题,小代码,能够解决大问题。大框架的问题,就藏在小细节中。越大的框架,这种小细节藏的越深。为什么要区分大小端模式?难道不会有中端模式吗?

一 基本原理与内存图

下面的内存视图的地址是递增的。

例如一个32位整形

uint32_t num = 0x12345678;

采用大端模式存储的内存视图:

0x80000001: 12 34 56 78 00 00 00 00 00 00 00 00 00 00 00 00

也可以做写作:

0x80000001: 12
0x80000002: 34
0x80000003: 56
0x80000004: 78

采用小端模式存储的内存视图:

0x80000001: 78 56 43 12 00 00 00 00 00 00 00 00 00 00 00 00

相对清晰的视图

0x80000001: 78
0x80000002: 56
0x80000003: 43
0x80000004: 12

二 使用指针验证大小端模式

#include <stdio.h>
#include <stdint.h>
int main(void)
{uint32_t num = 0x12345678;uint8_t *c = (uint8_t*)&num;int i = 0;printf("c = 0x%x\n",*c);if(*c == 0x12){printf("big endian\n");}else if(*c == 0x78){printf("little endian\n");}else{printf("error\n");}for(i = 0;i < sizeof(uint32_t);i++){printf("c[%d]=0x%x ",i,c[i]);}printf("\n");return 0;
}

测试结果:如果输出0x78,那就是小端模式,如果输出0x12那就是大端模式。

lkmao@ubuntu:~$ ./a.out
c = 0x78
little endian
lkmao@ubuntu:~$

二 使用共用体验证大小端模式

#include <stdio.h>
#include <stdint.h>
union endian{uint32_t num;uint8_t c;
};
int main(void)
{union endian e;e.num = 0x12345678;printf("e.c = 0x%x\n",e.c);printf("e.num = 0x%x\n",e.num);if(e.c == 0x12){printf("big endian\n");}else if(e.c == 0x78){printf("little endian\n");}else{printf("error\n");}return 0;
}

测试结果

lkmao@ubuntu:~$ ./a.out
e.c = 0x78
e.num = 0x12345678
little endian
lkmao@ubuntu:~$

四 相对正规的写法

在该示例中,is_little_endian函数中定义了一个匿名共用体,并定义了一个共用体变量e。如果e.c等于1则返回为真,属于小端模式,否则就是大端模式。

#include <stdio.h>
#include <stdint.h>
int is_little_endian(void)
{union {uint32_t num;uint8_t c;}e;e.num = 1;return e.c;
}
int main(void)
{if(!is_little_endian()){printf("big endian\n");}else{printf("little endian\n");}return 0;
}

二维地址空间就是二维存储空间吗?

我们熟知的内存计算策略是二元的,要么向左(递减),要么向右(递减)。在很久以前,经常使用两个8位的内存芯片级联为一个16位的内存芯片,在CPU中存储的16位数据,很可能高8位数据存放在内存芯片1,而低八位数据存放在内存芯片2。在地址空间上,他们是连续的,在存储空间上,他们是分别位于两颗不同的芯片。类似的原理在数据库中叫分片存储。

小结

。。。

判断处理器是大端模式还是小端模式相关推荐

  1. 【已解决】如何判断处理器是大端,或小端?

    去年11月份的面试题,今天有空整理出来了,算是总结. ************************************************************ 大端.小端指对操作数的存 ...

  2. 大端模式与小端模式的理解以及判断方法

    1. 为什么会有大端模式和小端模式 在计算机中,我们知道数据是按照字节存储的,如果数据都是单字节存储,就不涉及存储顺序的问题.但是,大多数情况下,数据不是按照单字节的方式存储的,例如会有类似于int, ...

  3. 判断大端模式和小端模式

    测试自己的电脑是大端模式还是小端模式 问题引入: CPU内部寄存器是按bit位来存储信息的,但是内部寄存器的数量是非常有限的,所有我们经常要把寄存器的数据存储到内存中.但是内存不是按bit位来存储信息 ...

  4. 计算机大端模式和小端模式 内存对齐问题(sizeof)

    目录(?)[+] 一大端模式和小端模式的起源 二什么是大端和小端 三数组在大端小端情况下的存储 四为什么会有大小端模式之分呢 五如何判断机器的字节序 内存对齐问题 再讲讲pragma pack 内存对 ...

  5. 大端模式与小端模式的详解分析

    大端序与小端序 何为大端序,小端序? 简单点说,就是字节的存储顺序,如果数据都是单字节的,那怎么存储无所谓了,但是对于多字节数据,比如int,double等,就要考虑存储的顺序了.注意字节序是硬件层面 ...

  6. 嵌入式基础01【转载】详解大端模式和小端模式

    ---------------- 版权声明:本文为CSDN博主「ce123」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明. 原文链接:https://blog. ...

  7. 大端模式和小端模式的区别

    一.什么是大端和小端 Big-Endian和Little-Endian的定义如下: Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端. Big-Endian就是 ...

  8. 详解大端模式和小端模式【转】

    详解大端模式和小端模式 一.大端模式和小端模式的起源 本文转载自:http://blog.csdn.net/ce123/article/details/6971544 关于大端小端名词的由来,有一个有 ...

  9. 【转】大端模式与小端模式、网络字节顺序与主机字节顺序 (经典)

    大端模式与小端模式 一.概念及详解 在各种体系的计算机中通常采用的字节存储机制主要有两种: big-endian和little-endian,即大端模式和小端模式. 先回顾两个关键词,MSB和LSB: ...

  10. 大端模式、小端模式、网络字节顺序与主机字节顺序

    大端模式.小端模式.网络字节顺序与主机字节顺序 大端模式与小端模式 概念与详解 在各种体系的计算机中通常采用的字节存储机制主要有两种:big-endian和little-endian,即大端模式和小端 ...

最新文章

  1. 替换Android系统镜像system.img的方法
  2. R语言ggplot2可视化分面直方图(faceting histogram)、使用gghighlight包突出高亮突出每个分面中的一个分组的直方图
  3. node mysql 连接池 超时,关于NodeJS中mysql连接池卡死问题
  4. UA MATH564 概率论I 求离散型随机变量的分布1
  5. 如何使用IcoMoon字体图标
  6. SuperSocket入门(二)- 探索AppServer、AppSession,Conmmand和App.config
  7. java 调用.net webservice axis2_java利用axis2调用.net写的webservice,传递自定义的实体类参数...
  8. 鸿蒙不是安卓也不是Linux
  9. CPU高速缓存SRAM命中问题的总结与实验
  10. Nokia n900使用
  11. kafka_2.10-0.8.1.1.tgz的1或3节点集群的下载、安装和配置(图文详细教程)绝对干货...
  12. Java 加密解密之对称加密算法PBE
  13. img里的align属性能保证图文的混排效果以及vspace和hspace
  14. 蜂窝物联网与嵌入式SIM(eSIM)
  15. 2022-03-25 redis哨兵处理failover
  16. Android探索之旅(第二十九篇)手把手教你如何简单创建快应用
  17. 02 FinalReference.referent的回收时机
  18. Windows远程桌面连接后被连接的桌面锁屏
  19. 2017-10-19 远光软件Java开发面试+达达京东到家笔试总结
  20. VC#复习资料(是轩~)

热门文章

  1. 前缀和与差分——最大加权矩形
  2. 用户openId 和 unionId 的区别
  3. PureMVC 实例讲解
  4. java基础知识学习小总结(一)
  5. Transformer拿下CV顶会大奖,微软亚研获ICCV 2021最佳论文
  6. Java代码的.equest的空指针异常
  7. uva12325(分类枚举)
  8. 关于Hanoi塔的实现
  9. 考研计算机专业课时长,计算机考研复习经验
  10. 如何移植 Arx/ Dbx 模块为 Crx/DBX 模块来支持 AutoCAD 易(值得一看)