判断字节序
首先我们需要知道什么是小端字节序和大端字节序。
考虑一个16位整数,它由2个字节组成。内存中存储这两个字节有两种方法:一种是将低序字节存储在低地址中,高字节存储在高地址中,这称为小端字节序(little-endian)字节序;另一种是将高序字节存储在低地址中,低序字节存储在高地址中,这称为大端字节序(big-endian).
其次我们需要知道用union怎么来查到主机的字节序,这就需要明白union的存储结构,那什么是Union呢,联合(union)是一种新的数据类型,它是一种特殊的变量;
union 联合名{
数据类型 成员名;
数据类型 成员名;
.......
}联合变量名;
联合表示几个变量公用一个内存位置,在不同的时间保存不同的数据类型和不同长度的变量。
例如:
int
main( )
{
union {
int i;
struct {
char first;
char second;
}half;
}number;
number. i = 0x4241;
printf( "%c%c\n" , number. half. first, number. half. second) ;
return 0;
}
输出结果:
AB
下面就让我们看看用程序怎么来查看主机的字节序:
#include < stdio. h>
#include < stdlib. h>
int
main( )
{
union {
short s;
char c[ sizeof ( short ) ] ;
}un;
un. s = 0x0102;
if ( sizeof ( short ) = = 2) {
if ( un. c[ 0] = = 1 && un. c[ 1] = = 2)
printf( "big-endian\n" ) ;
else if ( un. c[ 0] = = 2 &&un. c[ 1] = = 1)
printf( "little-endian\n" ) ;
else
printf( "unkown" ) ;
}
exit( 0) ;
}