【发布时间】:2013-05-11 06:39:04
【问题描述】:
我只想知道如何将 char(字节)中包含的十六进制值转换为整数。我想将颜色缓冲区从 .bmp 文件转换为十六进制,然后将其转换为整数。
例如:
char rgb_hexa[3] = {0xA8, 0xF4, 0xD3};
转换后:
int rgb_int[3] = {168, 244, 211};
我一直尝试使用 strtol,但它似乎只适用于 char *。我尝试进行以下测试,但它不起作用:
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是相同的,只是编写完全相同的东西的不同方式使程序员更容易。编译器将相同的 binary 表示形式放入已编译的二进制文件中。 -
@JoachimPileborg - 你需要转换为无符号 - 168 比
char的大小要多。 -
@user93353 这取决于。如果您使用 MSVC 的
/J选项进行编译,168将适合char。不过,更一般地说,您要么必须转换为unsigned char, 或&和0xFF。后者甚至可以在 9 位字节的机器上工作(但我不知道在哪里签名了普通的char)。 -
@JamesKanze True,/J 使默认 char 无符号。
标签: c++ c hex type-conversion