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)

posted @   夕西行  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2019-05-23 11、LineEdit与setCompleter自动补全
2019-05-23 10、堆叠窗口StackedWidget
2019-05-23 9、消息对话框、文件对话框
点击右上角即可分享
微信分享提示