web-dev-qa-db-fra.com

Convertisseur décimal en hexadécimal en Java

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.

16
flyingpretzels

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);
33
kol

Simple:

  public static String decToHex(int dec)
  {
        return Integer.toHexString(dec);
  }

Comme mentionné ici: Java Convertir un entier en entier hex

19
Andreas L.

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

11
Raymond Chenon

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;
    }
}
2
Andrej

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;
}
1
prometeus10

Le moyen le plus simple de procéder est:

String hexadecimalString = String.format("%x", integerValue);
0
Skilla

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;
}
0
Idan

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);
    }
}        
0
user8720114

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;
}

}
0
Ankit Singla

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

0
D4rWiNS

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 .

0
Shiva

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();
}
0
Sameer Shrestha