Mam liczbę całkowitą, która została wygenerowana z android.graphics.Color
Liczba całkowita ma wartość -16776961
Jak przekonwertować tę wartość na ciąg szesnastkowy w formacie #RRGGBB
Po prostu: chciałbym wypisać # 0000FF z -16776961
Uwaga: nie chcę, aby dane wyjściowe zawierały alfa, i spróbowałem tego przykładu bez powodzenia
Odpowiedzi:
Maska zapewnia, że dostaniesz tylko RRGGBB, a% 06X daje heks z zerową wartością (zawsze 6 znaków):
źródło
Wypróbuj Integer.toHexString ()
Źródło: W Javie, jak przekonwertować tablicę bajtów na ciąg cyfr szesnastkowych, zachowując początkowe zera?
źródło
0x000000FF
lub0xFF0000FF
jeśli usuniesz alfa.Wydaje mi się, że znalazłem odpowiedź. Ten kod konwertuje liczbę całkowitą na ciąg szesnastkowy i usuwa alfa.
Uwaga: użyj tego kodu tylko wtedy, gdy masz pewność, że usunięcie alfa nie wpłynie na nic.
źródło
0x00FFFFFF
przez to, nastąpi awariaColor.parseColor
.Oto co zrobiłem
Dzięki, chłopaki, że odpowiedzi zrobiliście
źródło
0x00FFFFFF
-> „FFFFFF” (bez alfa). Drugi wariant nie działa dla0x00000FFF
-> „F” (brakujące bity).String.format("#%08X", intColor)
Wartość całkowita koloru ARGB do ciągu szesnastkowego:
Szesnastkowy ciąg do wartości całkowitej koloru ARGB:
źródło
Dzięki tej metodzie Integer.toHexString możesz mieć wyjątek Nieznany kolor dla niektórych kolorów podczas korzystania z Color.parseColor.
I dzięki tej metodzie String.format („#% 06X”, (0xFFFFFF i intColor)) stracisz wartość alfa.
Więc polecam tę metodę:
źródło
źródło
Jeśli użyjesz
Integer.toHexString
, skończysz z pominiętymi zerami podczas konwersji kolorów takich jak0xFF000123
. Oto moje rozwiązanie oparte na Kotlin, które nie wymaga ani klas Androida, ani Java. Możesz więc użyć go również w projekcie wieloplatformowym:źródło