union utype
{
int i
char a
}
void main()
{
union utype u
u.i = 1
if (u.a)
printf("小端\n")
else
printf("大端\n")
}
大端模式(Big-Endian)又称大端字节序,由于在网络传输中一般使用的是大端模式,所以也叫网络字节序。
在大端模式中,将高位字节放在低位地址,低位字节放在高位地址。
举个例子,数值 0x12345678 ,其中 0x12 这一端是高位字节, 0x78 这一端是低位字节。
该数值的存储顺序是这样的:
大端模式符合我们阅读和书写的方式,都是从左到右的。比如 12345678 ,我们只需要按照从左到右的顺序进行阅读和书写就是大端模式的存储顺序了。
小端模式(Little-Endian)又称小端字节序,由于大多数计算机内部处理使用的是小端模式,所以也叫主机序。
在小端模式中,将高位字节放在高位地址,低位字节放在低位地址。
小端模式比较符合我们人类的思维模式,大的放大的那一边,小的放小的那一边。但是在计算机中存储的顺序与我们看到的顺序是相反的。
对于早期的计算机来说,先处理低位字节效率比较高,因为计算都是从低位开始的,所以大多数计算机内部处理使用的是小端模式。但是计算机发展到现在,计算机的处理器相较于以前已经进步很多了,先处理高位还是低位字节的影响已经可以忽略,但是为了向后兼容,保留了大/小端模式。
大小端模式各有优势:小端模式强制转换类型时不需要调整字节内容,直接截取低字节即可;大端模式由于符号位为第一个字节,很方便判断正负。
大端模式更适合程序员阅读,因为看到的内容与输出的内容是一致的。
计算机在处理数据的时候,只会按照顺序去读取字节,不关心数据是大端模式还是小端模式。
程序在读取到数据后,需要判断计算机的大小端模式,来决定是否需要进行大小端转换。
如果读到的第一个字节是高位字节,那么就是大端模式;反之,如果读到的第一个字节是低位字节,那么就是小端模式。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)