今晚网络编程的时候又碰到了字节序的问题,这次可能要在嵌入式上开发,所以得小心点。
对于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()进行字节序和字符串转换。