那么什么是字节序呢?有哪些字节序呢?进行网络编程的时候须要把稳哪些细节呢?
首先先理解下什么是字节序
字节序,顾名思义字节的顺序,便是大于一个字节类型的数据在内存中的存放顺序。

字节序常日分为两类:Big-Endian 和 Little-Endian。
引用标准的 Big-Endian 和 Little-Endian 的定义如下:
Little-Endian:便是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。Big-Endian:便是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。
那么什么是网络字节序呢?
网络字节序:TCP/IP各层协议将字节序定义为 Big-Endian,因而Big-Endian字节序又称为网络字节序
比如C措辞的int值(32位),占用4个字节。那么这4个字节在内存中是怎么排列的呢?网络传输的时候,哪个字节先传,哪个字节后传呢?
unsigned int ival = 0x12345678;
用
unsigned char szBuf[4];
来表示
在Big-Endian的打算机中是
szBuf[3] -> 0x78;szBuf[2] -> 0x56;szBuf[1] -> 0x34;szBuf[0] -> 0x12;
在Little-Endian的打算机中是
szBuf[3] -> 0x12;szBuf[2] -> 0x34;szBuf[1] -> 0x56;szBuf[0] -> 0x78;
网络传输的时候,按照szBuf[0],szBuf[1],szBuf[2],szBuf[3]的顺序传输。
那么吸收端如何知道这是一个0x12345678,还是0x78563412呢?
这个时候就须要有一个约定了,这便是网络字节序的来历,网络字节序被定义为Big-Endian字节序。
然后事情就大略了,不管本地打算机是什么类型的打算机,如何存储字节序。只要涉及网络传输的,就统一将本机字节序转换为网络字节序。发送和吸收都一样。有了统一的中间转换字节序,这样两端的数值就对上号。
附上c措辞网络编程的网络字节顺序与本地字节顺序之间的转换函数:
htonl()--"Host to Network Long"ntohl()--"Network to Host Long"htons()--"Host to Network Short"ntohs()--"Network to Host Short"