c++ 如何将整数值转换为十六进制值[已关闭]

njthzxwz  于 2023-02-10  发布在  其他
关注(0)|答案(1)|浏览(158)

已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题?**添加详细信息并通过editing this post阐明问题。

3天前关闭。
Improve this question
我试图隐藏数据到一个BMP图像,为此,我需要有整数值的每个像素的红色,绿色,蓝色的颜色。因为我已经写了RGB颜色的头默认十六进制值,我需要将该值转换为整数,并再次从整数到十六进制值。但我无法进行转换。
无符号整数蓝色{0x 00000 ff};如果我读取我的bmp图像的每个像素的蓝色,如何得到蓝色的整数值?

xvw2m8pv

xvw2m8pv1#

正如其他人在评论中所说的,像素RGB(或ARGB)值只是一个32位(或4字节)的数字。你只需要关注你感兴趣的字节。你可以移动数字然后屏蔽它,或者屏蔽数字然后移动它(这两种方法可能会有性能差异)。
因此,要从RGB值中获取红色分量,您需要将红色字节(第二个最高有效字节)向右移动两个字节,使其成为最低有效字节。
_ R G B =〉_ _ _ R
然后屏蔽结果,以便只查看最低有效字节(以防最高有效字节中有一些数据)。

int red(const int pixel) {return (pixel >> 16) & 0xFF;}
int green(const int pixel) {return (pixel >> 8) & 0xFF;}
int blue(const int pixel) {return (pixel & 0xFF);}

正如您所看到的,蓝色值不需要移位,因为它已经是最低有效字节。
正如注解中提到的,如果需要解析alsph值,则需要将值右移24位,然后屏蔽结果。
要重新组合RGB组件,您只需反向移动。

int RGB (const int red, const int green, const int blue)
{
   return (red << 16) | (green << 8) | (blue);
}

系统库中通常有一些函数可以为您完成所有这些工作,但至少通过这种方式您将了解到:)

相关问题