高數據類型存取低數據類型,如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)

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