zoukankan      html  css  js  c++  java
  • 主机字节序和网络字节序

    不同的CPU有不同的字节序类型,这些字节序是指 整数 在内存中保存的顺序,这个叫做 主机序。最常见的有两种:

    1Little endian:将低序字节存储在起始地址

    2Big endian:将高序字节存储在起始地址

    LE little-endian(小端)

    1. 最符合人的思维的字节序;
    2. 地址低位存储值的低位;
    3. 地址高位存储值的高位;
    4. 怎么讲是最符合人的思维的字节序,是因为从人的第一观感来说; 
    5. 低位值小,就应该放在内存地址小的地方,也即内存地址低位;
    6. 反之,高位值就应该放在内存地址大的地方,也即内存地址高位;

    BE big-endian(大端)

    1) 最直观的字节序;

    2) 地址低位存储值的高位; 

    3) 地址高位存储值的低位;

    4) 为什么说直观,不要考虑对应关系; 

    5) 只需要把内存地址从左到右按照由低到高的顺序写出;

    6) 把值按照通常的高位到低位的顺序写出;

    7) 两者对照,一个字节一个字节的填充进去;

    例子:在内存中双字 0x01020304(DWORD) 的存储方式 

    Addr: 4000 4001 4002 4003
    LE  :  04  03    02   01
    BE  :  01  02    03   04

    x86系列CPU都是little-endian的字节序。网络字节顺序采用big endian排序方式。

    网络字节顺序TCP/IP中规定好的一种数据表示格式,它与具体的CPU类型、操作系统等无关,从而可以保证数据在不同主机之间传输时能够被正确解释。

    我们知道计算机正常的内存增长方式是从低到高(当然栈不是),取数据方式是从基址根据偏移找到他们的位置,从他们的存储方式可以看出,大端存储因为第一个字节就是高位,从而很容易知道它是正数还是负数,对于一些数值判断会很迅速。而小端存储 第一个字节是它的低位,符号位在最后一个字节,这样在做数值四则运算时从低位每次取出相应字节运算,最后直到高位,并且最终把符号位刷新,这样的运算方式会更高效。

  • 相关阅读:
    Flask框架学习教程 汇总篇
    git版本管理工具
    Django-rest framework框架 汇总篇
    数据库学习之路 汇总篇
    Web后端开发学习教程 汇总篇
    Django框架学习教程 汇总篇
    Web前端开发学习教程 汇总篇
    Python开发之爬虫 汇总篇
    Python从入门到放弃 汇总篇
    flask之SQLAlchemy
  • 原文地址:https://www.cnblogs.com/mazg/p/9816315.html
Copyright © 2011-2022 走看看