引言
在C语言中,为了在不同的字节序之间进行转换,可使用socket库中的提供API转换函数,主要包括下面四个:
htons:把unsigned short类型从主机序转换到网络序
htonl:把unsigned long类型从主机序转换到网络序
ntohs:把unsigned short类型从网络序转换到主机序
ntohl:把unsigned long类型从网络序转换到主机序
代码实现
如对于整数0x12345678,在Windows系统上默认是小端序存储,将其转换为大端存储的方式,其C语言代码如下:
结论
其运行结果为:
在调试状态下,在内存窗口中查看变量a和变量b的地址,也可以清晰的看到两种字节序的不同存储情况。本例中变量a和变量b的地址分别为0x00B3FD3C和0x00B3FD24:
从运行结果可以加深小端序、大端序的理解:
小端序(Little-Endian)就是低位字节排放在内存的低地址端即该值的起始地址,高位字节排放在内存的高地址端,最符合人的思维的字节序,地址低位存储值的低位,地址高位存储值的高位。
大端序(Big-Endian)就是高位字节排放在内存的低地址端即该值的起始地址,低位字节排放在内存的高地址端,最直观的字节序,地址低位存储值的高位,地址高位存储值的低位。
领取专属 10元无门槛券
私享最新 技术干货