union存取低高位

夕西行發表於2024-05-23

聯合體型別,變數成員共用同一記憶體,同一時刻只能儲存一個成員的資料。

以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)

相關文章