C语言判断大小端的几种方法
在操作系统中,经常会用到判断大小端,很多面试题中也会经常遇到,以前的时候没有总结过,这里总结一下。
以后用到了就直接可以用了。
所谓的大小端,大致的解释意思就是:
【大端模式】 CPU对操作数的存放方式是高地址存放低位,低地址存放高位。
【小端模式】CPU对操作数的存放方式是高地址存放高位,低地址存放低位。
大多数ARM处理器都是采用的小端模式,PowerPC是采用的大端模式,网络字节序是采用的大端模式。
常用的有两种方式来判断大小端,一种是使用C语言中的联合体,具体代码如下:
|
1
2
3
4
5
6
7
8
9
10
|
int checkCPU(){union w{int a;char b;}c;c.a = 1;return (c.b == 1); // 小端返回TRUE,大端返回FALSE} |
其中,linux内核中就是使用这部分的代码,代码如下所示:
|
1
2
|
static union { char c[4]; unsigned long mylong; } endian_test = {{ 'l', '?', '?', 'b' } };#define ENDIANNESS ((char)endian_test.mylong) |
另外一种就是使用指针的方式,具体代码如下所示:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
void checkPoint(void){ int i = 1; unsigned char *pointer; pointer = (unsigned char *)&i; if(*pointer) { printf("litttle_endian"); } else { printf("big endian/n"); } } |

浙公网安备 33010602011771号