在操做系统中,常常会用到判断大小端,不少面试题中也会常常遇到,之前的时候没有总结过,这里总结一下。linux
之后用到了就直接能够用了。面试
所谓的大小端,大体的解释意思就是:网络
【大端模式】 CPU对操做数的存放方式是高地址存放低位,低地址存放高位。操作系统
【小端模式】CPU对操做数的存放方式是高地址存放高位,低地址存放低位。指针
大多数ARM处理器都是采用的小端模式,PowerPC是采用的大端模式,网络字节序是采用的大端模式。code
经常使用的有两种方式来判断大小端,一种是使用C语言中的联合体,具体代码以下:blog
int checkCPU() { union w { int a; char b; }c; c.a = 1; return (c.b == 1); // 小端返回TRUE,大端返回FALSE }
其中,linux内核中就是使用这部分的代码,代码以下所示:it
static union { char c[4]; unsigned long mylong; } endian_test = {{ 'l', '?', '?', 'b' } }; #define ENDIANNESS ((char)endian_test.mylong)
另一种就是使用指针的方式,具体代码以下所示:io
void checkPoint(void) { int i = 1; unsigned char *pointer; pointer = (unsigned char *)&i; if(*pointer) { printf("litttle_endian"); } else { printf("big endian/n"); } }