码迷,mamicode.com
首页 > 其他好文 > 详细

大端?小端?网络字节序?

时间:2020-03-10 11:37:09      阅读:47      评论:0      收藏:0      [点我收藏+]

标签:一个   进制   图片   mamicode   text   两种   不同的   class   接收   

不同CPU中,4字节整数1在内存空间的存储方式是不同的。4字节整数1可用2进制表示如下:

00000000 00000000 00000000 00000001

有些CPU以上面的顺序存储到内存,另外一些CPU则以倒序存储,如下所示:

00000001 00000000 00000000 00000000

若不考虑这些就收发数据会发生问题,因为保存顺序的不同意味着对接收数据的解析顺序也不同。

大端序和小端序

CPU向内存保存数据的方式有两种:

  • 大端序(Big Endian):高位字节存放到低位地址(高位字节在前)。
  • 小端序(Little Endian):高位字节存放到高位地址(低位字节在前)。

仅凭描述很难解释清楚,不妨来看一个实例。假设在 0x20 号开始的地址中保存4字节 int 型数据 0x12345678,对于大端序,最高位字节 0x12 存放到低位地址,最低位字节 0x78 存放到高位地址。

大端序CPU保存方式如下图所示:

技术图片

 图1:整数 0x12345678 的大端序字节表示

小端序的保存方式如下图所示:

技术图片

 图2:整数 0x12345678 的小端序字节表示

网络字节序和主机字节序

网络字节序是确定的,而主机字节序是多样的。

网络字节序统一为大端序。

主机字节序既可以是大端的,也可以是小端的,现代计算机大多采用小端字节序。

不同CPU保存和解析数据的方式不同(主流的Intel系列CPU为小端序),小端序系统和大端序系统通信时会发生数据解析错误。

为了避免这个问题,约定数据在不同计算机之间传递时都采用大端字节序,也叫作网络字节序。通信时,发送方需要把数据转换成网络字节序(大端字节序)之后再发送,接收方再把网络字节序转成自己的字节序。主机A先把数据转换成大端序再进行网络传输,主机B收到数据后先转换为自己的格式再解析。

大端?小端?网络字节序?

标签:一个   进制   图片   mamicode   text   两种   不同的   class   接收   

原文地址:https://www.cnblogs.com/cyx-b/p/12454495.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!