J'essaie de convertir un nombre d'un entier en un autre entier qui, s'il était imprimé en hexadécimal, aurait la même apparence que l'entier d'origine.
Par exemple:
Convertir 20 en 32 (qui est 0x20)
Convertir 54 en 84 (qui est 0x54)
public static int convert(int n) {
return Integer.valueOf(String.valueOf(n), 16);
}
public static void main(String[] args) {
System.out.println(convert(20)); // 32
System.out.println(convert(54)); // 84
}
En d'autres termes, traitez le nombre d'origine comme s'il était en hexadécimal, puis convertissez-le en décimal.
Le moyen le plus simple consiste à utiliser Integer.toHexString(int)
Une autre façon de convertir int to hex.
String hex = String.format("%X", int);
Vous pouvez changer les majuscules X
en x
pour les minuscules.
Exemple:
String.format("%X", 31)
résultats 1F
.
String.format("%X", 32)
résultats 20
.
int orig = 20;
int res = Integer.parseInt(""+orig, 16);
Vous pouvez essayer quelque chose comme ceci (comme vous le feriez sur papier):
public static int solve(int x){
int y=0;
int i=0;
while (x>0){
y+=(x%10)*Math.pow(16,i);
x/=10;
i++;
}
return y;
}
public static void main(String args[]){
System.out.println(solve(20));
System.out.println(solve(54));
}
Pour les exemples que vous avez donnés, ceci calculerait: 0 * 16 ^ 0 + 2 * 16 ^ 1 = 32 et 4 * 16 ^ 0 + 5 * 16 ^ 1 = 84
String input = "20";
int output = Integer.parseInt(input, 16); // 32
Le texte suivant est optimisé si vous souhaitez uniquement imprimer la représentation hexa d’un entier positif.
Il devrait être rapide car il utilise uniquement la manipulation de bits, les valeurs utf-8 de ASCII caractères et récursivité pour éviter l'inversion d'un StringBuilder
à la fin.
public static void hexa(int num) {
int m = 0;
if( (m = num >>> 4) != 0 ) {
hexa( m );
}
System.out.print((char)((m=num & 0x0F)+(m<10 ? 48 : 55)));
}
Faites simplement ceci:
public static int specialNum(num){
return Integer.parseInt( Integer.toString(num) ,16)
}
Il devrait convertir tout entier décimal spécial en son équivalent hexadécimal.