• 关于C结构体bit field的跨平台的教训


    转载自:

    http://blog.ednchina.com/wangxing/154537/message.aspx

    C语言的STRUCT提供了一种叫bit field的语法,可以根据需要决定成员占用某字节的从X位到Y位,例如,下面一个结构:
    struct tagtest
    {
       char a:4;
       char b:2;
       char c:2;
    };

    这个定义的含义是整个结构是一个字节长度,成员a占4位,b占2位,c占2位。这样定义以后,我们可以方便的通过设置成员的值来设置结构,而不需要进行位操作了。例如:
    tagtest myTest;
    myTest.a = 10;
    myTest.b = 2;
    myTest.c = 1;

    但今天发现一个问题,就是windows系统上的和MAC上对待这个结构是不同的;现象如下:
    如果在windows上这是上面的值,在MAC上得到的结构成员值为:
    myTest.a = 6;myTest.b = 2;myTest.c = 2;
    仔细分析之后觉得这个不是字节序的问题,因为字节序对一个字节是不起作用的,如果起作用那传输数据就麻烦了了;那么是什么问题导致的呢?
    应该是编译器造成的,规律如下:
    在WINDOS上,编译器认为c是字节的高位,而a是字节的低位;但MAC上正好相反了;a 是字节的低位,c是字节的低位。
    紧记在心!!!

  • 相关阅读:
    DC中为什么要用Uniquify?
    hdu 1596 find the safest road
    hdu2112 HDU Today
    hdu 2066 一个人的旅行
    poj 3026 Borg Maze
    poj 1979 Red and Black
    poj 1321 棋盘问题
    hdu 1010 Tempter of the Bone
    hdu 4861 Couple doubi
    codeforces584B Kolya and Tanya
  • 原文地址:https://www.cnblogs.com/Leon5/p/1406210.html
Copyright © 2020-2023  润新知