一、 Big Endian 与 Little Endian
举例:0x12345678
大端模式存储:
小端模式存储:
大部分操作系统采用小端模式
MACOS,JAVA程序,所有网络协议都采用大端模式,所以有时候把Big Endian称为网络字节序。
当两台采用不同字节序的主机进行通信时,在发送数据之前都必须经过字节序转换成网络字节序后再传输。
程序验证字节序
#include <arpa/inet.h>
int main()
{
unsigned long a = 0x12345678;
unsigned char *p = (unsigned char *)(&a);
printf("主机字节序:%0x %0x %0x %0x\n", p[0], p[1], p[2], p[3]);
unsigned long b = htonl(a); //将主机字节序转化成了网络字节序
p = (unsigned char *)(&b);
printf("网络字节序:%0x %0x %0x %0x\n", p[0], p[1], p[2], p[3]);
return 0;
}
二、网络字节序与主机字节序
htons : unsigned short 主机序 -> 网络序
htonl : unsigned long 主机序 -> 网络序
ntohs : unsigned short 网络序 -> 主机序
ntohl : unsigned long 网络序 -> 主机序