利用联合和数组分配顺序来判断CPU的字节序(大端,小端)(原创)

前段时间见过一段代码,用于判断CPU的类型,是Big-Endian还是Little-Endian。

代码如下(小端返回1,大端返回0):

 

1 int checkCPU( )
2 {
3 {
4 union w
5 {
6 int a;
7 char b;
8 } c;
9 c.a = 1;
10 return(c.b ==1);
11 }
12 }

 

 

这段代码巧妙地利用了C语言中联合的特点,联合中的元素总是从低字节开始分配

但是这一特征我没有在TCPL上找到,不是到是不是与编译器的实现有关。

但是C语言数组元素的地址分配却与CPU无关,无论大端小端,都是从低地址往高地址分配依次分配数组元素。

所以,可以利用这个特点来判断CPU的字节序类型。

代码如下:

 

1 #include <stdio.h>
2  int main()
3 {
4 union ut{
5 short s;
6 char c[2];
7 }u;
8  if(sizeof(short) == 2)
9 {
10 u.s = 0x0102;
11 if(u.c[0] == 1 && u.c[1] == 2)
12 {
13 printf("big enidan\n");
14 }else if(u.c[0] == 2 && u.c[1] == 1)
15 {
16 printf("little endian.\n");
17 }
18 return 0;
19 }
20 }

 

posted @ 2010-10-17 12:54  毛豆子  阅读(1176)  评论(0编辑  收藏  举报