网络字节序与本地字节序
定义1:字节序是指占内存多于一个字节类型的数据在内存中的存放顺序,通常有两种字节顺序,根据他们所处的位置我们分别称为主机字节序和网络字节序。
定义2:不同的CPU有不同的字节序类型,这些字节序是指整数在内存中保存的顺序,这个叫做主机序。最常见的有两种:
1:Little endian:将低字节存储在起始地址;2:Big endian:将高序字节存储在起始地址。
little endian: 地址低位存储值的低位
big endian: 地址低位存储值的高位
网络字节序是TCP/IP中规定好的一种数据表示格式,它与具体的CPU类型,操作系统等无关,从而可以保证数据在不同的主机之间传输时能够被正确解释。网络字节顺序采用big endian排序方式。为了进行转换socket提供提供了转换的函数,有下面四个:1:htons 把unsigned short类型从主机序转换到网络序;2: htonl 把unsigned long类型从主机序转换到网络序;3: ntohs 把unsigned short类型从网络序转换到主机序;4: ntohl 把unsigned long类型从网络序转换到主机序。(s 就是short, l 就是long; h 就是host ; n 就是network)
Note: 在网络程序开发的时候或者是跨平台开发的时候应该注意保证只用一种字节序,不然两方的解释不一样就会
产生各种各样的BUG的。