zoukankan      html  css  js  c++  java
  • 关于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是字节的低位。
    紧记在心!!!

  • 相关阅读:
    GitLab-添加SSH Key亲历教程
    java-数组Array的应用总结
    Java-方法的重载和重写
    JSON-相关的工具收藏分享
    java-无重复的排列组合小技能
    Charles安装与使用
    深拷贝浅拷贝
    文件操作
    列表生成式
    非空即真,非零即真
  • 原文地址:https://www.cnblogs.com/Leon5/p/1406210.html
Copyright © 2011-2022 走看看