我只想知道如何将char(byte)中包含的十六进制值转换为整数。我想从一个.bmp文件转换颜色缓冲区,当然这个文件是十六进制的,并将它转换为整数。如何将char(byte)中包含的十六进制值转换为整数?
例如:
char rgb_hexa[3] = {0xA8, 0xF4, 0xD3};
转换后:
int rgb_int[3] = {168, 244, 211};
我总是试图使用与strtol,但它似乎只能用炭工程*。我试图做下面的测试,但它不起作用:
char src_hexa_red = 0xA8;
char src_hexa_green = 0xF4;
char src_hexa_blue = 0xD3;
std::cout << "R=" << strtol(&src_hexa_red, (char**)NULL, 16) << ", G="
<< strtol(&src_hexa_green, (char**)NULL, 16) << ", B="
<< strtol(&src_hexa_blue, (char**)NULL, 16) << std::endl;
有没有人可以帮助我吗? 在此先感谢您的帮助。
你不需要做任何事情。整数字面值'0xA8'和'168'是相同的,它只是写出完全相同的东西以使程序员更容易的不同方式。编译器在编译的二进制文件中放入相同的**二进制**表示。 –
@JoachimPileborg - 你需要将其转换为无符号的 - 168不仅仅适用于'char'。 – user93353
@ user93353这取决于。如果使用MSVC编译'/ J'选项,'168'将适合'char'。但更普遍的是,你必须转换为'unsigned char',或'0xFF'。后者甚至可以在具有9位字节的机器上工作(但我不知道任何在哪里清单'char'被签名)。 –