大端序
大端序又叫网络字节序。大端序规定高位字节在存储时放在低地址上,
在传输时高位字节放在流的开始;低位字节在存储时放在高地址上,
在传输时低位字节放在流的末尾。
小端序又叫主机字节序。小端序规定高位字节在存储时放在高地址上,
在传输时高位字节放在流的末尾;低位字节在存储时放在低地址上,
总结:
字节序只针对于多字节类型的数据。比如对于int类型整数0x12345678,它
占有4个字节的存储空间,存储方式有大端(0x12, 0x34, 0x56, 0x78)和
小端(0x78, 0x56, 0x34, 0x12)两种。可以看到,在大端或小端的存储方式中,
大端序又叫网络字节序。大端序规定高位字节在存储时放在低地址上,
在传输时高位字节放在流的开始;低位字节在存储时放在高地址上,
在传输时低位字节放在流的末尾。
TCP/IP都是采用网络字节序的方式,java也是使用大端序方式存储。
小端序又叫主机字节序。小端序规定高位字节在存储时放在高地址上,
在传输时高位字节放在流的末尾;低位字节在存储时放在低地址上,
在传输时低位字节放在流的开始。
总结:
字节序只针对于多字节类型的数据。比如对于int类型整数0x12345678,它
占有4个字节的存储空间,存储方式有大端(0x12, 0x34, 0x56, 0x78)和
小端(0x78, 0x56, 0x34, 0x12)两种。可以看到,在大端或小端的存储方式中,
是以字节为单位的。所以对于单字节类型的数据,不存在字节序这个说法。
C程序验证字节序
#include <stdio.h>
/* 测试是大端序还是小端序 */
union Byte_Seq
{
int num;
char c[4];
};
int main()
{
printf("size of union: %d\n", sizeof(union Byte_Seq));
union Byte_Seq bs;
bs.num = 0x12345678;
/* 如果c[0]是0x12,则是大端序,如果c[0]是0x78,则是小端序 */
printf("Byte_Seq.c[0] = 0x%x\n", bs.c[0]); //小端序
printf("Byte_Seq.c[1] = 0x%x\n", bs.c[1]);
printf("Byte_Seq.c[2] = 0x%x\n", bs.c[2]);
printf("Byte_Seq.c[3] = 0x%x\n", bs.c[3]);
return 0;
}