记得在学习UC中的网络编程时,会经常用到这样的api:
ntohs、ntohl 或者反过来htons、htonl,前俩是将网络字节序转换为主机字节序,后者是将主机字节序转换为为网络字节序。
为什么要转换?
字节序是什么?
简单的做一下感念介绍:
“大端” 与 “小端”:
小端(Little-Endian) 低位字节排放到低地址端,在内存地址是依次按字节增加;
大端(Big-Endian ) 低位字节排放到高地址端,在内存地址是依次按字节减少。
拿个网络上的图给大家理解下:
为什么要这样转换来转换去,这就要怪互联网的盛行了。
网络传输协议规定(TCP/IP UDP)使用大端字节序在网络上传输数据。
这下急坏了搞系统和硬件的大佬们,借用网络上的数据一用:
不同的CPU上运行不同的操作系统,字节序也是不同的: 处理器 操作系统 字节排序 Alpha 全部 Little endian HP-PA NT Little endian HP-PA UNIX Big endian Intelx86 全部 Little endian <-----x86系统是小端字节序系统 Motorola680x() 全部 Big endian MIPS NT Little endian MIPS UNIX Big endian PowerPC NT Little endian PowerPC 非NT Big endian <-----PPC系统是大端字节序系统 RS/6000 UNIX Big endian SPARC UNIX Big endian IXP1200 ARM核心 全部 Little endian
现在解释下 什么是主机字节序?什么是网络字节序?
主机字节序:在主机内存中多字节数值存放的顺序
网络字节序:在网络这多字节数值传输的先后顺序
各位大佬为此急破了脑袋也没辙,后来有个聪明的家伙就比较聪明了就发明 字节序转换函数。