程序中采用两种方法来判断当前CPU的数据存储格式的类型:
- 第一种方法是直接判断一个2字节的short整形变量1(0x0001)在内存中的存储方式,若是Little-Endian方式存储的,则内存低字节存放数据低位01,高字节存放数据高位00,所以只要判断低字节是否为1,若为1则为Little-Endian(小尾端)类型的CPU,反之则为Big-Endian 类型的CPU。
- 第二种方法用一个定义联合类型的变量,包含一个short'整型和一个字符型的成员。由于联合类型的数据成员的存放总是从内存低地址开始,且所有数据成员共用一片内存空间,这片空间的大小是成员中数据类型长度最大的那个值。那么初始化第一个整型成员为1后,访问第二个字符类型的成员时,实际是访问ige字节该片内存空间的第一字节,所以只要判断该字节的值是否为1即可。
程序清单如下:
/* This Program is used to get the data-store type of the CPU.
* Author: Denven, 2007-10-26
*/
void Endian1(void)
{
short int a = 0x0001;
char *p = (char *)&a; /* memory address: low high
little endian : 01 00
big endian is : 00 01
*/
(p[0]==1)?puts("Little Endian CPU."):puts("Big Endian CPU.");
}
void Endian2(void)
{
union
{ /*memory assign for union variable c*/
short int a; /*memory address: | low high | */
char b; /* |-- a(2bytes)--| */
}c; /* |-- b --|------| */
c.a = 1; /*little endian is:| 0 1 0 0 | */
/*big endian is :| 0 0 0 1 | */
(c.b==1)?puts("Little Endian CPU."):puts("Big Endian CPU.");
}