web-dev-qa-db-fra.com

Convertir une chaîne hexadécimale (hex) en une chaîne binaire

J'ai trouvé la manière suivante de la conversion hexadécimale en binaire:

String binAddr = Integer.toBinaryString(Integer.parseInt(hexAddr, 16)); 

Bien que cette approche fonctionne pour les petits nombres hexadécimaux, un nombre hexadécimal tel que le suivant

A14AA1DBDB818F9759

Lance un NumberFormatException.

J'ai donc écrit la méthode suivante qui semble fonctionner:

private String hexToBin(String hex){
    String bin = "";
    String binFragment = "";
    int iHex;
    hex = hex.trim();
    hex = hex.replaceFirst("0x", "");

    for(int i = 0; i < hex.length(); i++){
        iHex = Integer.parseInt(""+hex.charAt(i),16);
        binFragment = Integer.toBinaryString(iHex);

        while(binFragment.length() < 4){
            binFragment = "0" + binFragment;
        }
        bin += binFragment;
    }
    return bin;
}

La méthode ci-dessus prend essentiellement chaque caractère de la chaîne hexadécimale et le convertit en ses équivalents binaires, le cas échéant avec des zéros, puis le joint à la valeur de retour. Est-ce une bonne façon d'effectuer une conversion? Ou est-ce que je néglige quelque chose qui pourrait faire échouer mon approche?

Merci d'avance pour toute aide.

22
Mark

BigInteger.toString(radix) fera ce que vous voulez. Passez juste un radix de 2.

static String hexToBin(String s) {
  return new BigInteger(s, 16).toString(2);
}
35
Mike Samuel
Integer.parseInt(hex,16);    
System.out.print(Integer.toBinaryString(hex));

Analyser hex (String) en entier avec base 16 puis le convertir en chaîne binaire en utilisant la méthode toBinaryString (int)

exemple

int num = (Integer.parseInt("A2B", 16));
System.out.print(Integer.toBinaryString(num));

Imprime

101000101011

Max Hex vakue géré par int is FFFFFFF

c'est-à-dire que si FFFFFFF0 est passé, ti donnera une erreur

4
Kumar

Avec tous les zéros:

static String hexToBin(String s) {
    String preBin = new BigInteger(s, 16).toString(2);
    Integer length = preBin.length();
    if (length < 8) {
        for (int i = 0; i < 8 - length; i++) {
            preBin = "0" + preBin;
        }
    }
    return preBin;
}
2
Musculaa
public static byte[] hexToBin(String str)
    {
        int len = str.length();
        byte[] out = new byte[len / 2];
        int endIndx;

        for (int i = 0; i < len; i = i + 2)
        {
            endIndx = i + 2;
            if (endIndx > len)
                endIndx = len - 1;
            out[i / 2] = (byte) Integer.parseInt(str.substring(i, endIndx), 16);
        }
        return out;
    }
1
Imran khan

Rapide et fonctionne pour les grandes cordes:

    private String hexToBin(String hex){
        hex = hex.replaceAll("0", "0000");
        hex = hex.replaceAll("1", "0001");
        hex = hex.replaceAll("2", "0010");
        hex = hex.replaceAll("3", "0011");
        hex = hex.replaceAll("4", "0100");
        hex = hex.replaceAll("5", "0101");
        hex = hex.replaceAll("6", "0110");
        hex = hex.replaceAll("7", "0111");
        hex = hex.replaceAll("8", "1000");
        hex = hex.replaceAll("9", "1001");
        hex = hex.replaceAll("A", "1010");
        hex = hex.replaceAll("B", "1011");
        hex = hex.replaceAll("C", "1100");
        hex = hex.replaceAll("D", "1101");
        hex = hex.replaceAll("E", "1110");
        hex = hex.replaceAll("F", "1111");
        return hex;
    }
0
Aleksander Wostal
import Java.util.*;
public class HexadeciamlToBinary
{
   public static void main()
   {
       Scanner sc=new Scanner(System.in);
       System.out.println("enter the hexadecimal number");
       String s=sc.nextLine();
       String p="";
       long n=0;
       int c=0;
       for(int i=s.length()-1;i>=0;i--)
       {
          if(s.charAt(i)=='A')
          {
             n=n+(long)(Math.pow(16,c)*10);
             c++;
          }
         else if(s.charAt(i)=='B')
         {
            n=n+(long)(Math.pow(16,c)*11);
            c++;
         }
        else if(s.charAt(i)=='C')
        {
            n=n+(long)(Math.pow(16,c)*12);
            c++;
        }
        else if(s.charAt(i)=='D')
        {
           n=n+(long)(Math.pow(16,c)*13);
           c++;
        }
        else if(s.charAt(i)=='E')
        {
            n=n+(long)(Math.pow(16,c)*14);
            c++;
        }
        else if(s.charAt(i)=='F')
        {
            n=n+(long)(Math.pow(16,c)*15);
            c++;
        }
        else
        {
            n=n+(long)Math.pow(16,c)*(long)s.charAt(i);
            c++;
        }
    }
    String s1="",k="";
    if(n>1)
    {
    while(n>0)
    {
        if(n%2==0)
        {
            k=k+"0";
            n=n/2;
        }
        else
        {
            k=k+"1";
            n=n/2;
        }
    }
    for(int i=0;i<k.length();i++)
    {
        s1=k.charAt(i)+s1;
    }
    System.out.println("The respective binary number is : "+s1);
    }
    else
    {
        System.out.println("The respective binary number is : "+n);
    }
  }
}
0
rayan