字节序

今晚网络编程的时候又碰到了字节序的问题,这次可能要在嵌入式上开发,所以得小心点。

对于0X12345678来存储

大端模式:比较符合直观(地址从左到右增加,数据高位到地位写过去就行)


地址 : 00 01 02 03

数据 : 12 34 56 78

小段模式:比较符合逻辑(低地址存低位,高字节存高位)


地址 : 00 01 02 03

数据:78 56 34 12

拿个IP地址传输来说:


IP : 106.187.89.255

0X : 6a : bb : 59 :e1

在小端模式CPU(X86的都是)下:


地址:00 01 02 03

数据:e1:59:bb:6a

转化成网络字节序,填充到IP头里面:


地址:00 01 02 03

数据:6a:bb:59:e1

传输过程:    0~7 bit, 8 ~ 15 bit,16 ~ 23 bit, 24 ~ 31 bit

传输中数据:   6a      ,    bb        ,       59       ,       e1

接收方


接收过程也是先来先服务(数据链路层也存在传输误码率的控制,这里不考虑丢包,重传之类的了)

那么接收方(假设也是小端)得到数据要是不通过字节序转化(此时还是网络字节序):

地址:00 01 02 03

数据:6a:bb:59:e1

这个时候IP就是就是e1.59.bb.6a,点分十进制就是225.89.187.106。

所以可以用inet_ntoa()进行字节序和字符串转换。

标签:NetWork

评论已关闭