主机字节序和网络字节序

前言知识

  字节顺序是指(在计算机中)多于一个字节的数据类型在内存中的存放顺序。例如一个32位整数由4个字节组成,内存中存储这4个字节可以采取两种方法:

  1. 小端字节序(little-endian):按照内存增长方向,高位数据存储于低位内存中;
  2. 大端字节序(big-endian):按照内存的增长方向,高位数据存储于低位内存中;

我们将0x12345678该数据以上述的两种方式放入内存,如下图:
在这里插入图片描述

备注:

  1. 对于数据0x12345678,我们需要知道的是这个数据是以16进制的方式表示,因此就存储的时候两位16进制表示就占用一个字节。
  2. 一个字节的数据就不存在这个问题,直接存储就行。

主机字节序和网络字节序

  1. 网络字节序:是TCP/IP中规定好的一种数据表示格式,它与具体的CPU类型、操作系统等无关,从而可以保证数据在不同主机之间传输时能被正确解释。网络字节序采用大端字节排序方式。
  2. 主机字节序:不同的机器主机字节序可能不同,与CPU设计有关,数据的顺序是由CPU决定的,而与操作系统无关。

  由于主机字节序的不同,数据从主机 A 到主机 B 的过程中,需要有一个标准化的过程(其标准化过程为将主机字节序转化为网络字节序)。如下图:
在这里插入图片描述

总结

  因此,为了克服不同主机字节序不同而造成机器之间无法通信。因此,需要转换成一种约定的字节序,即网络字节序。

补充:

  1. 如果程序采用的编程语言,即使是同一台机器上的两个进程也要考虑字节序的问题。
  2. 在不同的编程环境下有提供网络字节序和主机字节序相互转换函数。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值