网络字节序

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");

字节序转换函数

总共有四个:

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

主机字节序 和 网络字节序

字节序的理解----C语言和Python语言

主机字节序和网络字节序

网络字节序

网络字节序

字节排序函数