Конвертация Hex из String в int (Цвет строки)

Версия Minecraft
1.7.10
API
Forge

VeniVidiVici

Санта Барбарис
327
15
198
Доброго всем времени суток, возник следующий вопрос: Как можно адекватно преобразовать Hex (хранящийся в String) в int , пригодный для использования в параметре color у метода drawString?

Условно, некую строку "0xFFFBFBFB" надо перегнать в int, вроде дело то понятное, но не могу разобраться, так как хранится в виде String по типу "FBFBFB" и потом соединяется с "0xFF". Проблема в том, что по дефолту 0xFFFBFBFB читается как Hex, а я его именно в String вынужден хранить, и не могу обратно преобразовать/собрать/сконвентировать.

Long (parseLong) тут не подходит, так как метод требует именно int, а сам предел Integer меньше чем максимальное возможное значение результата, по той же причине не преобразуется и обычный parseInt().

Чувствую, что где-то вокруг брожу, и решение простое, но может азы какие-то упускаю, или ещё чего, никак не соображу что-то. Подскажите, кто знает, пожалуйста.
 
Решение
ААа.... я не верно поняла вопрос. Если требует инт, тога поидее все, что может прийти на влох должно поместиться в инт. Цвет 0 x FF FF FF, а максимум 0x7F FF FF FF. это на 2 порядка меньше(в 16 ричной системе) чем вмещает инт. Все влезает!

VeniVidiVici

Санта Барбарис
327
15
198
Вот енто может помочь: BigInteger num = new BigInteger(str, 16);
Ну, либо я не шарю в java совсем, либо ещё какие проблемы с IQ, но оно же тоже не подходит, по причине того что метод прям настоятельно требует drawString непосредсвтенно int , не long, не byte. Или у меня совсем беды с основой метричности? Как из BigInteger получать именно int?
 

GoogleTan

Картошка :3
1,354
43
310
ААа.... я не верно поняла вопрос. Если требует инт, тога поидее все, что может прийти на влох должно поместиться в инт. Цвет 0 x FF FF FF, а максимум 0x7F FF FF FF. это на 2 порядка меньше(в 16 ричной системе) чем вмещает инт. Все влезает!
 

VeniVidiVici

Санта Барбарис
327
15
198
ААа.... я не верно поняла вопрос. Если требует инт, тога поидее все, что может прийти на влох должно поместиться в инт. Цвет 0 x FF FF FF, а максимум 0x7F FF FF FF. это на 2 порядка меньше(в 16 ричной системе) чем вмещает инт. Все влезает!
Так там же цвет пишет в rgba по форме 0 x FF FF FF FF? Или уже я путаю?
 

VeniVidiVici

Санта Барбарис
327
15
198

VeniVidiVici

Санта Барбарис
327
15
198
Нет... R: 0-255 G: 0-255 B: 0-255. А альфа вроде в цвете не задается. По крайней мере так на 1.12.2+(ниже не ведаю)
А, стой, тот же начальный вопрос, а как мне из String "0xFFFFFF" получить int?
Integer.parseInt()? А оно с "0x" меня в школьный учебник по информатике для чайников не отправит? 🤔 :)
 

VeniVidiVici

Санта Барбарис
327
15
198
Не знаю. Проверь. Если отправит, то бери подстроку начинающуюся с 3 символа.
Проверил, отправляет 🤔

А разве 0xFFFFFF будет эквивалентно Integer.parseInt(FFFFFF) ?)

Эквивалентно
 
Последнее редактирование:

VeniVidiVici

Санта Барбарис
327
15
198
класс Color используй. из него спокойно можешь передавать .getRGB в drawString.
Спасибо конечно, вот только:
  • Вопрос уже решён и тема помечена отвеченной
  • Твоё предложение не решает вопроса (суть была не в передаче цвета, а в получении его Hex кодировки из String)
  • На кой мне лишние два этапа по перегону из нужного int в класс Color и обратно? Оо
 

will0376

Токсичная личность
2,059
55
574

VeniVidiVici

Санта Барбарис
327
15
198
Про decode понял, буду знать, спасибо.

Но..
Да и зачем изобретать велосипед?
Так погоди, почему велосипед то?

У меня есть исходный String
Мне нужно отправить int в существующий метод, который int и просит.

Я беру и получаю int из String через
Integer.parseInt(myString, 16);

Зачем Color то? 🤔 :)
 

will0376

Токсичная личность
2,059
55
574
затем, что он правильно сможет распарсить твою строку(туда хоть HEX, хоть инт хоть строку подавай)
(да и поправить сразу цвет можно будет :D)
1609314783756.png
Я беру и получаю int из String через
Integer.parseInt(myString, 16);
да, ты прав. можно и так. Но я за безопасный код(ну... когда не впадлу :D )
 
Сверху