高数据类型存取低数据类型,如int存储uchar

数据通信领域为了提高效率和节省空间,经常传输具体的字节数。

图像的红绿蓝值一般是uchar类型0~255,即1个字节。那么可以用int类型存红绿蓝(4个字节足够存3个字节的内容)。

    //char占1个字节,int占4个字节,足够存3个char
    uchar r = 15;
    uchar g = 162;
    uchar b = 255;
    int color = 0;
    //r、g、b存入int
    color |= r;            //低8位
    color |= g << 8;    //中8位
    color |= b << 16;    //高8位
    std::cout << color << std::endl;
    //从int读出r、g、b
    uchar r1 = color & 0xFF;    //1个F就是4个1(即1111)。如果要取16位,则用0xFFFF。
    uchar g1 = (color >> 8) & 0xFF;
    uchar b1 = (color >> 16) & 0xFF;
    std::cout << (int)r1 << " " << (int)g1 << " " << (int)b1 << std::endl;//仅为了展示结果才转的int

 参考

数据类型、位运算、sizeof()函数 - 夕西行 - 博客园 (cnblogs.com)

数组,不同类型的存取 - 夕西行 - 博客园 (cnblogs.com)

posted @ 2024-03-11 09:35  夕西行  阅读(39)  评论(0编辑  收藏  举报