新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 共用體union的妙用

        共用體union的妙用

        作者: 時間:2016-12-01 來源:網絡 收藏
        結構體struct是一個常用的數據類型,主要是將各種類型的數據打包成一個新的數據類型,在驅動開發,寄存器的定義等方面都有比較大的優勢。在使用的過程中需要注意空結構體的大小以及對齊(8字節)對數據大小的影響。具體的應用就不說了。另一個與struct非常相近的數據類型union則相對運用的較少,但是如果理解了union的本質就會發現該數據類型的好處。
        union主要是將各種類型的數據存放在一段固定的存儲器中,存儲器的大小由union中需要最大存儲器的數據類型決定。比如:
        union student
        {
        char ***;
        int age;
        long number;
        double score;
        };
        其中long、double需要16個字節,而char 只需要1個字節,因此該共用體占用16個字節。union的關鍵是不同的數據類型共用存儲器。
        主要的運用:
        1、確定CPU的模式:大端、小端模式確定
        大小端不同,則存儲的方式也存在差別,比如int需要4個字節,而char只需要1個字節,根據1個字節所在的具體位置即可判定CPU的模式
        union TestCPU
        {
        int i;
        char ch;
        };
        void testCPUMode(void)
        {
        union TestCPU Test;
        Test.i = 1;
        if(Test.ch == 1)
        {
        //這個CPU是小端模式
        }
        else
        {
        //這種情況下就是大端模式
        }
        }
        2、實現不同數據之間的類型轉換
        union Type
        {
        int i;
        char ch;
        long lint;
        ....
        };
        ...
        union Type type;
        這樣各種類型的數據共用存儲空間,很方便的實現了不同數據類型之間的轉換,不需要顯示的強制類型轉換。
        union相比struct更加的節省空間。
        3、寄存器的定義,實現整體的訪問和單項的訪問。
        struct register
        {char a;
        char b;
        char c;
        char d;
        };
        union Register
        {
        struct register;
        int whole;
        };
        這樣就能實現單項和整體的訪問,特別是引入位域操作等相關結構以后,能夠實現每一個bit的訪問。
        其他的優勢需要總結,我暫時寫這三點了。


        評論


        技術專區

        關閉
        主站蜘蛛池模板: 荔波县| 平利县| 邹平县| 龙州县| 建水县| 阿拉善左旗| 张家港市| 新宁县| 徐水县| 阳江市| 双柏县| 綦江县| 科尔| 隆德县| 板桥市| 娄烦县| 常山县| 兴国县| 嘉兴市| 安远县| 静乐县| 米林县| 嵩明县| 分宜县| 巴林左旗| 三都| 芒康县| 嫩江县| 手游| 大埔县| 喀什市| 寿光市| 稷山县| 郁南县| 恭城| 临城县| 滨海县| 安丘市| 安远县| 荥经县| 玉溪市|