2007年8月5日星期日

验证big-endian or little-endian

编写函数判断计算机的字节存储顺序是开序(little endian)还是降序(bigendian)

解释:
对于字节,按通常顺序依次在内存中存放。
对于字或双字,在该字(或双字)的内部,则按“倒字存放” 原则存储(little_endian),
具体如下:
对一个字,存储时先存放低字节,再存放高字节(即低字节占低地址,
高字节占高地址)。字的地址是指其低字节的地址。
对一个双字,存储时先存放低字,再存放高字(即低字占低地址,高
字占高地址)。双字的地址是指其低字的地址。在每个字的内部,
同样按低字原则存放。
注意,无论是字节、字、双字,总体是还是往上长的,所谓倒是指在每个
字(或双字)的内部是倒的,但字与字(或双字与双字)之间还是顺序存放的。

A1:
bool IsBigendian()
{
unsigned short usData = 0x1122;
unsigned char *pucData = (unsigned char*)&usData;

return (*pucData == 0x22);
}

A2:
int checkCPU()
{
UNION f
{
int a;
char b;
}c;

c.a = 1;

return (c.b == 1);
}

没有评论: