htonl函数是一个网络转换的函数,他把不确定的一个32位数字,转换成网络通用的32位数字,即大头在后的方式。
****************************************************************************
htonl = Host To Network, type Long /***************************************************************************/ x86系统的数据存放都是按照little-endian的格式(硬件层没有对字节序的区分机制)。
字节顺序
不同的计算机处理数字有两种形式,big-endian和little-endian型式( little-endian格式的数据,例如0X12345678以(0X78 0X56 0X34 0X12)方式保存、 big-endian格式的数据,例如0X12345678以(0X12 0X34 0X56 0X78)方式保存 ),这依赖于他们是怎么设计的,比如Intel的x86处理器,多字节是用little-endian型式。IP地址和和端口在电脑中是多字节存放的,他们是host-byte顺序,然而当IP地址和端口通过网络时,必须转成big-endian形式,也就是network-byte顺序 有一系列函数完成两者之间的转换。比如 host-byte序转network-byte序 u_long htonl(u_long hostlong); int WSAHtonl( SOCKET s, u_long hostlong, u_long FAR * lpnetlong ); u_short htons(u_short hostshort); int WSAHtons( SOCKET s, u_short hostshort, u_short FAR * lpnetshort ); network-byte序转host-byte序 u_long ntohl(u_long netlong); int WSANtohl( SOCKET s, u_long netlong, u_long FAR * lphostlong ); u_short ntohs(u_short netshort); int WSANtohs( SOCKET s, u_short netshort, u_short FAR * lphostshort ); |