为什么网络传输要采用大端序(带实例)

传输指定的大端序


看了许多文章都不能够简短的进行解释,自己琢磨了下进行分享。

大端序:高位在低地址,这符合人类读写逻辑,例如字符串/文本,从左到右,char data[128] = “123456”
小端序:地位在低地址,这符合电路读取顺序,例如 int 64位,地位在低地址,电路将 int 的存储数据由小到高进行数据合成,这个读取顺序刚好与我们相反。

我们在编程的时候,对于文本和字符串的写入,本身就是头部/高位从低地址开始写,相当于大端序的写入/读取逻辑,这就使得文本/字符串等写入逻辑对于电路的读取逻辑十分方便。

但是,数值型 int 的写入/读取逻辑又是相反的,为使得这种逻辑统一,就规范使用网络大端序。即传输的数据统一为高位在前,地位在后。 否则,会出现传输数据同时带有两种端序(数值小端,其它大端)。

示例: 数值 0x123456 与 字符串"0x123456"
统一大端序:0x12 0x34 0x56 和 ‘0’ ‘x’ ‘1’ ‘2’ ‘3’ …
不统一: 0x56 0x34 0x12 和 ‘0’ ‘x’ ‘1’ ‘2’ ‘3’ …

PS:进行大端序转换主要是方便我们传输的数据进行解读。 到了计算机进行解读时,还是得将数值转为小端序,让计算机进行解析

协议指定的大端序问题


这个需要根据具体协议进行调整,而且必须调整。一般指的是字节内部的比特表示顺序。
例如 某字节内部比特位的信息可表示为:(注意:一般都是采用默认小端位序)

a1	 a2    a3
0-2   3-4   5-7

在大端序表示下,还需调整为:(注意:不是一个一个比特位的调换,而是表示位的调换,否则就是大端位序了)

a3	 a2    a1
5-7   3-4   0-2

调整后,到了网卡传输都是采用小端位序发送比特,即调整后是怎么样,接收的就是怎么样。

结论


大端序传输是大家都应该采用的,便于抓包等的调试分析。
比特位内部的端序问题是根据协议设定的。
以上所述内容,均针对小端机作为发送方情况下进行大端序转换。

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值