将 0xFF 位移到 Uint32 末尾如何形成完整的十六进制代码?

问题描述 投票:0回答:1

我一直在 Udemy 上关注 Cave of Planning 的 C++ for Complete Beginners,在第 67 课中,他介绍了位移位以在 SDL 窗口中输出某些颜色像素。在某个片段中,他对 Uint32 中的一系列 Uint8 进行了左移,最后在其末尾添加了 0xFF。我很难弄清楚为什么它在最后。

void Screen::setPixel(int x, int y, Uint8 red, Uint8 green, Uint8 blue) {
    Uint32 color = 0;
    color += red; // 00000080
    color <<= 8; // 00008000
    color += green; // 00008000
    color <<= 8; // 00800000
    color += blue; // 008000FF
    color <<= 8; // 8000FF00
    color += 0xFF; // 8000FF000xFF ???


    m_buffer[(y * SCREEN_WIDTH) + x] = color; // y * screen_width gives 800, 1600 etc pixels; essentially allows row selection

}

这是我当前正在使用的功能,评论是我在教程中的思考过程。

在编程上,整数(128, 0, 255)用于(红,绿,蓝),对应于十六进制的(80,00,FF)

编译程序后,显示十六进制代码 0xFF8000FF 的颜色,我通过放置在线找到的相同颜色(https://convertingcolors.com/hex-color-8000FF.html)并并排检查来验证它-side 以确保它与我的 SDL 窗口中显示的匹配,但我不明白 0xFF 如何从 Uint32 的末尾“跳”到前面。

我很难在网上找到资源,因为我不完全确定如何简洁地表达我的问题。

编辑:使用 g++ 编译器

c++ hex sdl bit bit-shift
1个回答
0
投票

您在 SDL 应用程序中指定的是 RGBA 颜色模型

[ R  | G  | B  | A ]
[ 80 | 00 | FF | FF]

你在网上看到的是RGB颜色模型,没有alpha通道

[ R  | G  | B ]
[ 80 | 00 | FF]

例如

[ R  | G  | B  | A ]
[ 80 | 00 | FF | 80]

可能会在白色背景上给出(如果我没记错的话)

[ R  | G  | B  ]
[ 40 | 00 | 80 ]
© www.soinside.com 2019 - 2024. All rights reserved.