网络字节序

Posted _Camille

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络字节序相关的知识,希望对你有一定的参考价值。


一、主机字节序

CPU对内存中数据进行存取的顺序。

1.小端字节序

一个数据的低位字节序的内容存放在低地址处,高字节序的内容存放在高地址处。
二进制比特位左边认为是高位,右边认为是低位。
在这里插入图片描述

在这里插入图片描述
由上图可见:我的CPU是小端字节序。

2.大端字节序

一个数据的低位字节序的内容存放在高地址处,高位字节序的内容存放在低地址处。
在这里插入图片描述
主机字节序取决于CPU架构,当下X86和X86_64架构都是小端字节序,而MIPS架构是大端字节序,字节序所针对的数据类型只有存储单位大于一个字节的数据类型,例如:short,int,long,float等,单字节存储不涉及字节序问题。

主机字节序对网络通信的影响:
两端主机字节序不同,可能导致数据二异。
解决方案:定义网络字节序为标准,不管主机是什么字节序,网络中的数据必须是网络字节序,两端主机根据自己的主机字节序进行数据转换。

二、网络字节序

网络通信中使用统一的字节序标准:网络字节序——大端字节序

网络字节序和主机字节序一样也有大小端之分,TCP/IP协议规定,网络数据流应采用大端字节序,暨低地址存高位。


判断主机字节序

int main()
{
	union A
	{
		int a;
		char b;
	}tmp;
	tmp.a = 1;
	if (tmp.b == 1)
		printf("主机为小端字节序~\\n");
	else
		printf("主机为大端字节序~\\n");
}

在这里插入图片描述

字节序转换函数

总共有四个:
在这里插入图片描述
在这里插入图片描述

以上是关于网络字节序的主要内容,如果未能解决你的问题,请参考以下文章

bingbingc(网络编程TCP UDP)

bingbingc(网络编程TCP UDP)

网络字节序的转换函数

c# 主机和网络字节序的转换 关于网络字节序和主机字节序的转换

网络字节序

网络字节序