Muszę zmienić wartość całkowitą na 2-cyfrową wartość szesnastkową w Javie. Czy jest na to jakiś sposób. Dzięki
Moja największa liczba to 63, a najmniejsza 0. Potrzebuję wiodącego zera dla małych wartości.
Muszę zmienić wartość całkowitą na 2-cyfrową wartość szesnastkową w Javie. Czy jest na to jakiś sposób. Dzięki
Moja największa liczba to 63, a najmniejsza 0. Potrzebuję wiodącego zera dla małych wartości.
Odpowiedzi:
String.format("%02X", value);
Jeśli używasz X
zamiast, x
jak sugeruje aristar , nie musisz używać .toUpperCase()
.
Integer.toHexString(42);
Javadoc: http://docs.oracle.com/javase/6/docs/api/java/lang/Integer.html#toHexString(int)
Pamiętaj jednak, że może to dać więcej niż 2 cyfry! (Liczba całkowita ma 4 bajty, więc potencjalnie możesz odzyskać 8 znaków).
Oto mały hack, aby uzyskać dopełnienie, o ile masz absolutną pewność, że masz do czynienia tylko z wartościami jednobajtowymi (255 lub mniej):
Integer.toHexString(0x100 | 42).substring(1)
O wiele więcej (i lepszych) rozwiązań w Lewy dopełnianie liczb całkowitych (format niedziesiętny) zerami w Javie .
String.format("%02X", (0xFF & value));
Użyj Integer.toHexString()
. Nie zapomnij uzupełnić początkowego zera, jeśli otrzymasz tylko jedną cyfrę. Jeśli Twoja liczba całkowita jest większa niż 255, otrzymasz więcej niż 2 cyfry.
StringBuilder sb = new StringBuilder();
sb.append(Integer.toHexString(myInt));
if (sb.length() < 2) {
sb.insert(0, '0'); // pad with leading zero if needed
}
String hex = sb.toString();
StringBuilder
rzeczywiście jest poprawą? pastebin.com/KyS06JMz
Używam tego, aby uzyskać ciąg reprezentujący równoważną wartość szesnastkową liczby całkowitej oddzielonej spacją dla każdego bajtu EX: wartość szesnastkowa 260 na 4 bajty = 00 00 01 04
public static String getHexValString(Integer val, int bytePercision){
StringBuilder sb = new StringBuilder();
sb.append(Integer.toHexString(val));
while(sb.length() < bytePercision*2){
sb.insert(0,'0');// pad with leading zero
}
int l = sb.length(); // total string length before spaces
int r = l/2; //num of rquired iterations
for (int i=1; i < r; i++){
int x = l-(2*i); //space postion
sb.insert(x, ' ');
}
return sb.toString().toUpperCase();
}
public static void main(String []args){
System.out.println("hex val of 260 in 4 bytes = " + getHexValString(260,4));
}
Według GabrielOshiro, jeśli chcesz sformatować liczbę całkowitą do długości 8, spróbuj tego
String.format("0x%08X", 20) //print 0x00000014