Преобразовать строку в шестнадцатеричный код java.lang.NumberFormatException

У меня есть такой цвет, как #FFFFFF, и я хочу преобразовать его в 0xFFFFFF

вот мой код, который его преобразует:

val hexColor = "0x${picture.color.drop(1)}".toInt()

когда я запускаю проект, я получаю эту ошибку:

Exception in thread "main" java.lang.NumberFormatException: For input string: 
"0xFFFFFF"

есть идеи, почему я получаю эту ошибку?

3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
0
0
39
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Чтобы преобразовать шестнадцатеричное String в число с основанием 10 и обратно, передайте основание в качестве аргумента toInt()-методу: используйте toInt(16) для шестнадцатеричных чисел.

Ответ принят как подходящий

Если вы хотите просто преобразовать FFFFFF в 0xFFFFFF, то .toInt() не нужен, а в остальном ваш код должен работать нормально.

Если вы хотите преобразовать значение цвета из шестнадцатеричного в десятичное, вы можете использовать функцию .toInt(16) без системы счисления (0x) в начале, например:

val color = picture.color.drop(1).toInt(16)

Или с помощью Integer.decode(), например:

val color = Integer.decode("0x${picture.color.drop(1)}")

Мне нужен шестнадцатеричный цвет как целое число, например 0xFFFFFF, у меня есть «#FFFFFF», и я должен преобразовать его в целое число с префиксом 0x

MohammadBaqer 23.04.2022 12:52
«Я должен преобразовать его в целое число с префиксом 0x» - это не имеет смысла. Целые числа не имеют префиксов 0x. Делают только гексы.
aneroid 23.04.2022 12:53

@aneroid, так как вы можете вызвать эту функцию fun getColorNameFromHex(hexColor: Int): String { val r = hexColor and 0xFF0000 shr 16 val g = hexColor and 0xFF00 shr 8 val b = hexColor and 0xFF return getColorNameFromRgb(r, g, b) }

MohammadBaqer 23.04.2022 12:59

Обратите внимание, что тип для hexColor в определении функции — это Int, а не строка или шестнадцатеричная строка. Поэтому просто преобразуйте свой #color в Int и передайте его этой функции. Кроме того, 0xFFFFFF vs "0xFFFFFF" - first - это шестнадцатеричное представление (литерал с основанием 16) целого числа. Вторая — это строковая версия; который вам не нужен.

aneroid 23.04.2022 13:02

В выражении "0x${picture.color.drop(1)}".toInt()0x добавляется к строке, а затем преобразуется в Int. 0x не имеет значения для Int. Поэтому сначала преобразуйте его в Int:

"0x${picture.color.drop(1).toInt()}"
// #FFFFFF --> 0x16777215 (wrong)

Конечно, размещение 0x перед десятичными цифрами меняет его значение/значение. Поэтому преобразуйте только число Int в шестнадцатеричный:

"0x${picture.color.drop(1).toInt(16).toString(16)}"
// #FFFFFF --> 0xffffff  (lowercase because that's how it's represented)

Но это шестнадцатеричная строка. И то, что у вас было раньше, уже было шестнадцатеричной строкой с дополнительным # перед ним. Так что просто брось это и добавь 0x:

"0x${picture.color.drop(1)}"
// #FFFFFF --> 0xFFFFFF

Если вы хотите сохранить цвет как int и Распечатать в шестнадцатеричном формате, объедините часть 1 и 2:

val actualColourValue = picture.color.drop(1).toInt(16)
println(actualColourValue)  // 16777215
println("0x${actualColourValue.toString(16)}")  // 0xffffff

Другие вопросы по теме