J'ai un devoir pour lequel je dois faire une conversion à trois voies entre décimal, binaire et hexadécimal. La fonction pour laquelle j'ai besoin d'aide convertit une décimale en hexadécimale. Je ne comprends presque pas hexadécimal, néanmoins, comment convertir une décimale en hexadécimal. J'ai besoin d'une fonction qui prend un int dec
et retourne un String hex
. Malheureusement, je n'ai pas de projet de cette fonction, je suis complètement perdu. Tout ce que j'ai c'est ça.
public static String decToHex(int dec)
{
String hex = "";
return hex;
}
De plus, je ne peux pas utiliser ces fonctions prédéfinies comme Integer.toHexString () ou quoi que ce soit, je dois réellement créer l'algorithme sinon je n'aurais rien appris.
Une solution possible:
import Java.lang.StringBuilder;
class Test {
private static final int sizeOfIntInHalfBytes = 8;
private static final int numberOfBitsInAHalfByte = 4;
private static final int halfByte = 0x0F;
private static final char[] hexDigits = {
'0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
};
public static String decToHex(int dec) {
StringBuilder hexBuilder = new StringBuilder(sizeOfIntInHalfBytes);
hexBuilder.setLength(sizeOfIntInHalfBytes);
for (int i = sizeOfIntInHalfBytes - 1; i >= 0; --i)
{
int j = dec & halfByte;
hexBuilder.setCharAt(i, hexDigits[j]);
dec >>= numberOfBitsInAHalfByte;
}
return hexBuilder.toString();
}
public static void main(String[] args) {
int dec = 305445566;
String hex = decToHex(dec);
System.out.println(hex);
}
}
Sortie:
1234BABE
Quoi qu'il en soit, il existe une méthode de bibliothèque pour cela:
String hex = Integer.toHexString(dec);
Simple:
public static String decToHex(int dec)
{
return Integer.toHexString(dec);
}
Comme mentionné ici: Java Convertir un entier en entier hex
J'ai besoin d'une fonction qui prend un int dec et renvoie un hexagone String.
J'ai trouvé une solution plus élégante de http://introcs.cs.princeton.edu/Java/31datatype/Hex2Decimal.Java.html . J'ai un peu changé par rapport à l'original (voir le montage)
// precondition: d is a nonnegative integer
public static String decimal2hex(int d) {
String digits = "0123456789ABCDEF";
if (d <= 0) return "0";
int base = 16; // flexible to change in any base under 16
String hex = "";
while (d > 0) {
int digit = d % base; // rightmost digit
hex = digits.charAt(digit) + hex; // string concatenation
d = d / base;
}
return hex;
}
Avertissement: J'utilise cet algorithme dans mon entretien de codage. J'espère que cette solution ne sera pas trop populaire :)
Edit 17 juin 2016: J'ai ajouté la variable base
pour donner la possibilité de changer de base: binaire, octal, base de 7 ...
Selon les commentaires, cette solution est la plus élégante et j'ai donc supprimé la mise en oeuvre de Integer.toHexString()
.
Edit 4 septembre 2015: J'ai trouvé une solution plus élégante http://introcs.cs.princeton.edu/Java/31datatype/Hex2Decimal.Java.html
Considérez la méthode dec2m ci-dessous pour la conversion de dec en hex, oct ou bin.
Exemple de sortie est
28 dec == 11100 bin
28 dec == 34 oct
28 dec == 1C hex
public class Conversion {
public static void main(String[] argv) {
int x = 28; // sample number
if (argv.length > 0)
x = Integer.parseInt(argv[0]); // number from command line
System.out.printf("%d dec == %s bin\n", i, dec2m(x, 2));
System.out.printf("%d dec == %s oct\n", i, dec2m(x, 8));
System.out.printf("%d dec == %s hex\n", i, dec2m(x, 16));
}
static String dec2m(int N, int m) {
String s = "";
for (int n = N; n > 0; n /= m) {
int r = n % m;
s = r < 10 ? r + s : (char) ('A' - 10 + r) + s;
}
return s;
}
}
Une autre solution possible:
public String DecToHex(int dec){
char[] hexDigits = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'A', 'B', 'C', 'D', 'E', 'F'};
String hex = "";
while (dec != 0) {
int rem = dec % 16;
hex = hexDigits[rem] + hex;
dec = dec / 16;
}
return hex;
}
Le moyen le plus simple de procéder est:
String hexadecimalString = String.format("%x", integerValue);
Voilà le mien
public static String dec2Hex(int num)
{
String hex = "";
while (num != 0)
{
if (num % 16 < 10)
hex = Integer.toString(num % 16) + hex;
else
hex = (char)((num % 16)+55) + hex;
num = num / 16;
}
return hex;
}
Une meilleure solution pour convertir Decimal en HexaDecimal et celui-ci est moins complexe
import Java.util.Scanner;
public class DecimalToHexa
{
public static void main(String ar[])
{
Scanner sc=new Scanner(System.in);
System.out.println("Enter a Decimal number: ");
int n=sc.nextInt();
if(n<0)
{
System.out.println("Enter a positive integer");
return;
}
int i=0,d=0;
String hx="",h="";
while(n>0)
{
d=n%16;`enter code here`
n/=16;
if(d==10)h="A";
else if(d==11)h="B";
else if(d==12)h="C";
else if(d==13)h="D";
else if(d==14)h="E";
else if(d==15)h="F";
else h=""+d;
hx=""+h+hx;
}
System.out.println("Equivalent HEXA: "+hx);
}
}
Voici le code pour n'importe quel numéro:
import Java.math.BigInteger;
public class Testing {
/**
* @param args
*/
static String arr[] ={"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"};
public static void main(String[] args) {
String value = "214";
System.out.println(value + " : " + getHex(value));
}
public static String getHex(String value) {
String output= "";
try {
Integer.parseInt(value);
Integer number = new Integer(value);
while(number >= 16){
output = arr[number%16] + output;
number = number/16;
}
output = arr[number]+output;
} catch (Exception e) {
BigInteger number = null;
try{
number = new BigInteger(value);
}catch (Exception e1) {
return "Not a valid numebr";
}
BigInteger hex = new BigInteger("16");
BigInteger[] val = {};
while(number.compareTo(hex) == 1 || number.compareTo(hex) == 0){
val = number.divideAndRemainder(hex);
output = arr[val[1].intValue()] + output;
number = val[0];
}
output = arr[number.intValue()] + output;
}
return output;
}
}
J'utiliserai
Long a = Long.parseLong(cadenaFinal, 16 );
car il y a un hex qui peut être plus grand qu'un entier et il lève une exception
Découvrez le code ci-dessous pour la conversion décimale en hexadécimale,
import Java.util.Scanner;
public class DecimalToHexadecimal
{
public static void main(String[] args)
{
int temp, decimalNumber;
String hexaDecimal = "";
char hexa[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
Scanner sc = new Scanner(System.in);
System.out.print("Please enter decimal number : ");
decimalNumber = sc.nextInt();
while(decimalNumber > 0)
{
temp = decimalNumber % 16;
hexaDecimal = hexa[temp] + hexaDecimal;
decimalNumber = decimalNumber / 16;
}
System.out.print("The hexadecimal value of " + decimalNumber + " is : " + hexaDecimal);
sc.close();
}
}
Vous pouvez en apprendre davantage sur les différentes manières de convertir décimal en hexadécimal en suivant le lien >> Java convertir décimal en hexadécimal .
Ce qui suit convertit décimal en hexa décimal avec Complexité temporelle: O(n) Temps linéaire sans fonction Java
private static String decimalToHexaDecimal(int N) {
char hexaDecimals[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
StringBuilder builder = new StringBuilder();
int base= 16;
while (N != 0) {
int reminder = N % base;
builder.append(hexaDecimals[reminder]);
N = N / base;
}
return builder.reverse().toString();
}