网络字节序与主机字节序

字节序

字节序是什么呢?

根据字面意思来看,就可以大概知道它的意思. 就是字节在内存中存放的顺序.

然而 , 字节序 又分为 大端字节序小端字节序

举个例子

300 这是一个 十进制 的数

0000   0001   0010   1100         这是 300 的 二进制
高位                          低位

如果是小端字节序的话,它在内存的表示形式是:

/--------------------------------------------------------------------/
                                                              ----------内存地址
                                      0000                ---------- ox16
                                      0001                ---------- ox15
                                      0010                ---------- ox14
                                      1100                ---------- ox13
/--------------------------------------------------------------------/

如果是大端字节序的话,它在内存的表示形式是:
/--------------------------------------------------------------------/
                                                              ----------内存地址
                                      1100                ---------- ox16
                                      0010                ---------- ox15
                                      0001                ---------- ox14
                                      0000                ---------- ox13
/--------------------------------------------------------------------/

刚好相反
可以参考下图理解
0x123456780x11223344两个数字
小端存储

大端存储

大端一般称为网络字节序
而主机字节序有大段的又有小端的, CPU的产商不一样,设计出来的也就不一样

还有一些字节序的存储与编程语言有关,比如java就是用大端来存数据的

进行网络传输的时候都要转成大端来传输,TCP/IP协议规定的.
所以那些小端存储的就要想办法来解决这个问题
所以Socket就解决了这个问题, 它里面有几个函数htons、htonl从主机字节序到网络字节序的转换函数, ntohs、ntohl从网络字节序到主机字节序的转换函数

posted @ 2022-10-06 22:07  林晓文  阅读(79)  评论(0编辑  收藏  举报