zoukankan      html  css  js  c++  java
  • CPU的大端小端 endian

    一、为什么会有大小端模式之分呢?

    因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8bit。

    但是在C语言中除了8bit的char之外,还有16bit的short型,32bit的int型。另外,对于位数大于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如果将多个字节安排的问题。因此就导致了大端存储模式和小端存储模式。

    例如一个16bit的short型x,在内存中的地址为0x0010,x的值为0x1122,那么0x11为高字节,0x22为低字节。

    对于大端模式,就将0x11放在低地址中,即0x0010中,0x22放在高地址中,即0x0011中。小端模式,刚好相反。

    二、什么是大端和小端?

    大端模式:是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中。

    小端模式:是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中。

    假如32位宽(uint32_t)的数据0x12345678,从地址0x08004000开始存放:

    从上面表可以看得出来,大小端的差异在于存放顺序不同

    三、数组在大端小端情况下的存储

    以unsigned int value = 0x12345678为例,分别看看在两种字节序下其存储情况,我们可以用unsigned char buf[4]来表示value。

    1.大端模式下

     2.小端模式下

     不知道大家对数组进行强制转换成整型数据没有?

    如果你要进行强制转换,肯定要考虑大小端问题。

    四、大小端谁更好?

    小端模式:强制转换数据不需要调整字节内容,1、2、4字节的存储方式一样。

    大端模式:符号位的判定固定为第一个字节,容易判断正负。

    总结:大端小端没有谁优谁劣,各自优势便是对方劣势。

    五、常见字节序

    常见的操作系统是小端,通讯协议是大端。

    1.常见CPU的字节序

    大端模式:PowerPC、IBM、Sun

    小端模式:x86、DEC

    ARM既可以工作在大端模式,也可以工作在小端模式

    2.STM32属于小端模式

    测试一款MCU属于大端,还是小端方法很多种,通过打印数据,通过在线调试查看数据:

    六、大小端转换

    开篇说了,实际应用中,大小端应用的地方很多通信协议、数据存储等。如果字节序不一致,就需要转换。

    只要你理解其中原理(高低顺序),转换的方法很多,下面简单列列两个。

    来源:公众号 嵌入式大杂烩

  • 相关阅读:
    分析问题的方法
    听听冯洛伊曼的概念机器的齿轮声
    Nginx支持WebSocket配置
    原型模式
    redis日志位置
    修改centos7远程端口和nginx安全设置
    Java输出小端二进制文件
    centos7安装Java8
    Nginx教程
    centos7.6安装postgresql10
  • 原文地址:https://www.cnblogs.com/sdb1942/p/13557950.html
Copyright © 2011-2022 走看看