union存取低高位

聯合體類型,變量成員共用同一內存,同一時刻只能保存一個成員的數據。

以1個4字節數據,傳遞r\g\b爲例

#include<stdint.h>
#include<iostream>

int main()
{
    uint32_t myV;    //用於模擬值傳遞

    //
    {
        union
        {
            struct
            {
                uint32_t r : 8;                //注意與“要傳遞的值”同類型,防止新開闢1個字節造成的位不連續
                uint32_t g : 8;
                uint32_t b : 8;
            }_s;
            uint32_t v = 0;                    //要傳遞的值
        }_u;

        _u._s.r = 120;
        _u._s.g = 130;
        _u._s.b = 140;
        std::cout << _u.v << std::endl;
        myV = _u.v;
    }

    //
    {
        union
        {
            struct
            {
                uint32_t myR : 8;
                uint32_t myG : 8;
                uint32_t myB : 8;
            }myS;
            uint32_t rgb = 0;
        }myU;
        //模擬值傳遞
        myU.rgb = myV;    
        //獲取r\g\b
        unsigned char r1 = myU.myS.myR;
        unsigned char g1 = myU.myS.myG;
        unsigned char b1 = myU.myS.myB;
        std::cout << (int)r1 << " " << (int)g1 << " " << (int)b1 << std::endl;
    }
}

數組、結構體、聯合體、枚舉類型、類型轉換 - 夕西行 - 博客園 (cnblogs.com)

高數據類型存取低數據類型,如int存儲uchar - 夕西行 - 博客園 (cnblogs.com)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章