网络字节序

网络字节序

  • 一、主机字节序
    • 1.小端字节序
    • 2.大端字节序
  • 二、网络字节序
  • 判断主机字节序
  • 字节序转换函数


一、主机字节序

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

1.小端字节序

一个数据的低位字节序的内容存放在低地址处,高字节序的内容存放在高地址处。
二进制比特位左边认为是高位,右边认为是低位。
网络字节序_第1张图片

网络字节序_第2张图片
由上图可见:我的CPU是小端字节序。

2.大端字节序

一个数据的低位字节序的内容存放在高地址处,高位字节序的内容存放在低地址处。
网络字节序_第3张图片
主机字节序取决于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");
}

网络字节序_第4张图片

字节序转换函数

总共有四个:
网络字节序_第5张图片
网络字节序_第6张图片

你可能感兴趣的:(网络,服务器)