网络字节序
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");
}
字节序转换函数
总共有四个:
以上是关于网络字节序的主要内容,如果未能解决你的问题,请参考以下文章