Поверните шестнадцатеричную строку в int (JAVA)

Asyc спросил: 13 июня 2018 в 03:22 в: java

Итак, я работаю над проектом, в котором есть 3 ползунка (r, g, b), и я использую String.format("%02x%02x%02x", r, g, b);, чтобы включить его в шестнадцатеричную строку, моя проблема в том, что я не могу превратить ее в int. Я искал в Интернете и ничего не нашел, единственное решение - Integer.parseInt(hex, 16), которое дает мне значение 87295, а мой исходный цвет - 0054FF, и я получаю 87295 (причина, по которой мне это нужно, как int потому, что все мои методы void требуют цвета в шестнадцатеричном виде в виде int)


3 ответа

Asyc ответил: 13 июня 2018 в 03:57
Таким образом, мой метод, который требует шестнадцатеричный, выглядит следующим образом: "void drawBox (int x, int y, int color)", а значение, требуемое для цвета, похоже на "0xFFFFFFFF", но как бы использовать число, выводимое Integer.parseInt?
Roshana Pitigala ответил: 13 июня 2018 в 04:21
Integer.parseInt(String s, 16);

нужен ваш друг.

Разбирает строковый аргумент как целое число со знаком в радиусе, заданном вторым аргументом ... В результате целочисленное значение.
~ Java doc ~


Пример:

Integer.parseInt("0054FF", 16);

OUTPUT:

21759

Вывод не соответствует указанному выходу (87295). Я полагаю, что ваша ошибка находится в другом месте вашего кода.


EDIT:

Согласно вашему комментарию,

Integer.decode(String s);

- то, что вам нужно, я думаю.

markspace ответил: 13 июня 2018 в 04:51
Наилучшим образом, самое большое количество только для RGB - 0xFFFFFF. Если у вас есть альфа-канал, у вас есть все 32 бита. Но "как использовать 0xFFFFFFFF" состоит в том, что он равен -1 десятичной, и это то, что вы используете. -1 имеет все нужные биты, не имеет значения, используете ли вы десятичное представление, это все равно такое же число (бит-паттерн) под капотом. Попробуйте и посмотрите, -1 должен быть установленным битом, который является белым. @Asyc
Geno Chen ответил: 13 июня 2018 в 03:59

Мой ответ предполагает, что вы задаете проблему X-Y, что означает, что он не может столкнуться с тем, что вам нужно в вашем вопросе.

Предположим r, g, b имеют тип int, также предполагают, что вам не нужен цвет Alpha, тогда вы можете использовать трюк манипуляции с битами, подобный этому, для прямого использования исходного значения для вычисления значения цвета, не превращая его в шестую строку.

int iColor = (r << 16) + (g << 8) + b;

Затем это значение можно использовать для превращения в шестнадцатеричную строку для дальнейшей необходимости.

String sColorHex = Integer.toHexString(iColor);

Обновить: из-за комментария другого ответа, альфа не следует игнорировать, и то, что действительно нужен исходному вопросу, кажется значением цвета int. Непосредственно используйте это, чтобы получить требуемое значение:

int color = 0xFF000000 + (r << 16) + (g << 8) + b;

В исходной проблеме не упоминается альфа-цвет, поэтому предположим, что альфа 100% (0xFF), которая отображается как (= 0xFF < 24) выше.