Я просто хочу знать, как преобразовать шестнадцатеричное значение, содержащееся в символе (байте) в целое число. Я хочу преобразовать цветовой буфер из .bmp-файла, который, конечно, в шестнадцатеричном формате и преобразовать его в целые числа.Как преобразовать шестнадцатеричное значение, содержащееся в символе (байт), в целое число?
Например:
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 - вам нужно будет отличить от unsigned - 168 больше, чем то, что поместится в 'char'. – user93353
@ user93353 Всё зависит. Если вы скомпилируете с помощью опции '/ J' с MSVC,' 168' поместится в 'char'. В более общем плане вам придется либо преобразовать в 'unsigned char', _or_' & 'с' 0xFF'. Последний будет работать даже на машинах с 9-битными байтами (но я не знаю нигде, где подписан знак «char»). –