高数据类型存取低数据类型,如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
参考