zoukankan      html  css  js  c++  java
  • 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");   
     
           }   
     
    }
  • 相关阅读:
    【HAOI2014】走出金字塔
    【HAOI2008】圆上的整点
    LOJ #116 有源汇点有上下界的最大流
    ZOJ [P2314] 无源汇点有上下界模版
    最小费用最大流模版
    最大流模版 dinic
    最大流模版 EK
    HDU [P1533]
    HDU [2255] 奔小康赚大钱
    POJ [P2289] Jamie's Contact Groups
  • 原文地址:https://www.cnblogs.com/bruce1992/p/13938674.html
Copyright © 2011-2022 走看看