网络字节序与主机字节序
字节序
字节序是什么呢?
根据字面意思来看,就可以大概知道它的意思. 就是字节在内存中存放的顺序.
然而 , 字节序 又分为 大端字节序 和 小端字节序
举个例子
300 这是一个 十进制 的数
0000 0001 0010 1100 这是 300 的 二进制
高位 低位
如果是小端字节序的话,它在内存的表示形式是:
/--------------------------------------------------------------------/
----------内存地址
0000 ---------- ox16
0001 ---------- ox15
0010 ---------- ox14
1100 ---------- ox13
/--------------------------------------------------------------------/
如果是大端字节序的话,它在内存的表示形式是:
/--------------------------------------------------------------------/
----------内存地址
1100 ---------- ox16
0010 ---------- ox15
0001 ---------- ox14
0000 ---------- ox13
/--------------------------------------------------------------------/
刚好相反
可以参考下图理解
0x12345678和0x11223344两个数字
小端存储
大端存储
大端一般称为网络字节序
而主机字节序有大段的又有小端的, CPU的产商不一样,设计出来的也就不一样
还有一些字节序的存储与编程语言有关,比如java就是用大端来存数据的
进行网络传输的时候都要转成大端来传输,TCP/IP协议规定的.
所以那些小端存储的就要想办法来解决这个问题
所以Socket就解决了这个问题, 它里面有几个函数htons、htonl从主机字节序到网络字节序的转换函数, ntohs、ntohl从网络字节序到主机字节序的转换函数