zoukankan      html  css  js  c++  java
  • 大端与小端,大尾与小尾,高尾端与低尾端,主机字节序与网络字节序

    概念剖析

    一时记忆与理解大端、小端的概念很容易,但时间一长,对于相似的概念人类的记忆向来是模糊的,甚至是换位的。所以除非你的记忆非常牢靠,否则借助大端和小端这样的名字,你很难将概念与内容联系紧密。

    也有文章提到用大尾与小尾的概念,个人觉得这个概念还是没有解决存储概念中的基本问题,大与小还是没有脱离以前的概念,但是引入了尾的概念,已经比大端与小端要更清晰一点。

    目前对于记忆大小端,我觉得这篇文章中提到的高尾端/低尾端名词记忆方法比较科学、形象。实话说,当时计算机科学著作翻译Big EndianSmall Endian时,确实没有考虑中国人理解的问题,直译显得生硬,还未做到信达雅的境界。

    刚才我们提到存储概念中的基本问题,其实就是两个:一是对于一个数据,如何标示它的头尾;二是头尾在内存中排列的顺序。基于这两个基本问题,我认为高尾端/低尾端这样的叫法是最科学,最贴近存储实情的。其中尾用于表示数据的尾端字节,如int型数据0x1122AABB0xBB即是尾。就更好理解了,指的是存储地址的高低。综合来说就是:

    高尾端:数据的尾端字节存储在内存的高地址。即头端字节存储在内存的低地址,数据依序增加存储。 
    低尾端:数据的尾端字节存储在内存的低地址。即头端字节存储在内存的高地址,数据依序递减存储。

    从这两个概念中,我们可以发现,高尾端存储方式比较符合人类的直观思维方式,地址依序增加,数据依序从头端后移,两者呈完美的顺位对应。而低尾端这种方式很是别扭,显得很反人类。

    因此,一般的网络通讯中,我们为了方便人类的习惯,采用高尾端传输方式,也就是大端方式。网络中数据流的传输顺序被称为网络字节序。由此对应一个概念就是主机字节序,也就是数据在主机中存储的方式。因此,在网络传输中,不同的主机有不同的字节序,传输前一定要转换成网络字节序,否则会引起数据传输的错误。


     

    直观理解

    上一小节中已经对于各种概念进行了描述,其中相应的关系也给出了,在实际工作中,大家还是习惯性的使用大小端的概念,刚才我也提到了,这种叫法不利于记忆与理解,因此推荐大家使用高尾端/低尾端的概念,两者之前的对应关系还是很明显的,甚至在不需要我说明的情况下,大家凭经验就可以知道高尾端对应大端,低尾端对应小端。

    这一节主要细化这两个一一对应的概念,让大家有更直观的感受。

    一般来说,计算机内存中都是以字节(Byte)为基本单位,那么对于一个int型数据,它在内存中的存储方式有两种,这就是大端存储小端存储。以上节数据0x1122AABB为例,假设存储在地址为0x91000000的内存处。很显然,它需要占用四个内存地址,从0x91000000-0x91000003

    地址0x910000000x910000010x910000020x91000003
    大端 11 22 AA BB
    小端 BB AA 22 11

    很自然,大家会觉得大端存储方式符合人类的习惯,这种存储方式就是将数据的尾端字节存储在高地址。上面的描述倒是怪怪的。但不论怎么说,高尾端/低尾端方式包含了存储问题中的两个基本要点,只要稍加思维,就可以将概念与内容对应上来。

  • 相关阅读:
    SqlServer 查看数据库中所有存储过程
    SqlServer 查看数据库中所有视图
    SqlServer 查询表的详细信息
    SqlServer 遍历修改字段长度
    net core 操作Redis
    Tuning SharePoint Workflow Engine
    Open With Explorer
    Download language packs for SharePoint 2013
    Change Maximum Size For SharePoint List Template when Saving
    Six ways to store settings in SharePoint
  • 原文地址:https://www.cnblogs.com/sddai/p/5790585.html
Copyright © 2011-2022 走看看