web-dev-qa-db-fra.com

Conversion de chaîne hexadécimale en entier décimal

J'ai écrit du code pour convertir ma chaîne d'affichage hexadécimale en entier décimal. Cependant, lorsque l'entrée correspond à quelque chose comme 100a ou 625b (quelque chose avec une lettre), j'ai une erreur comme celle-ci: 

Java.lang.NumberFormatException: pour la chaîne d'entrée: "100a" à Java.lang.NumberFormatException.forInputString (Source inconnue) à Java.lang.Integer.parseInt (Source inconnue)

Avez-vous une idée de comment puis-je convertir ma chaîne avec des lettres en entier décimal?

if(display.getText() != null)
{
    if(display.getText().contains("a") || display.getText().contains("b") || 
       display.getText().contains("c") || display.getText().contains("d") || 
       display.getText().contains("e") ||display.getText().contains("f"))
    {   
        temp1 = Integer.parseInt(display.getText(), 16);
        temp1 = (double) temp1;
    }
    else
    {
        temp1 = Double.parseDouble(String.valueOf(display.getText()));
    }
}
17
vontarro

Il semble y avoir un espace supplémentaire dans votre chaîne. Vous pouvez utiliser trim() pour supprimer les espaces blancs de début et de fin:

temp1 = Integer.parseInt(display.getText().trim(), 16 );

Ou si vous pensez que la présence d'un espace signifie qu'il y a quelque chose d'autre qui ne va pas, vous devrez le vérifier vous-même, car nous n'avons pas le reste de votre code.

47
ajb
  public static int hex2decimal(String s) {
             String digits = "0123456789ABCDEF";
             s = s.toUpperCase();
             int val = 0;
             for (int i = 0; i < s.length(); i++) {
                 char c = s.charAt(i);
                 int d = digits.indexOf(c);
                 val = 16*val + d;
             }
             return val;
         }

C’est la solution la plus efficace et la plus élégante que j’ai trouvée sur Internet . Certaines des solutions proposées ici ne m'ont pas toujours fonctionné.

16
AlexAndro
//package com.javatutorialhq.tutorial;

import Java.util.Scanner;

/* * Java code convert hexadecimal to decimal */ 
public class HexToDecimal {

    public static void main(String[] args) {

        // TODO Auto-generated method stub 

        System.out.print("Hexadecimal Input:");

        // read the hexadecimal input from the console 

        Scanner s = new Scanner(System.in); 

        String inputHex = s.nextLine();

        try{ 

// actual conversion of hex to decimal

            Integer outputDecimal = Integer.parseInt(inputHex, 16);

            System.out.println("Decimal Equivalent : "+outputDecimal);


        }

        catch(NumberFormatException ne){

            // Printing a warning message if the input is not a valid hex number

            System.out.println("Invalid Input"); 

        }

        finally{ s.close();

        }
    } 
}
3
TheOraclePhD

Ma façon:

private static int hexToDec(String hex) {
    return Integer.parseInt(hex, 16);
}
1

classe publique Hex2Decimal {

public static void hexDec(String num)
{
    int sum=0;
    int newnum = 0;
    String digit = num.toUpperCase();
    for(int i=0;i<digit.length();i++)
    {
        char c = digit.charAt(digit.length()-i-1);

        if(c=='A')
        {
            newnum = 10;

        }
        else if(c=='B')
        {
            newnum = 11;

        }
        if(c=='C')
        {
            newnum = 12;

        }
        if(c=='D')
        {
            newnum = 13;

        }
        if(c=='E')
        {
            newnum = 14;

        }
        if(c=='F')
        {
            newnum = 15;

        }
        else
        {
            newnum = Character.getNumericValue(c);
        }
        sum = (int) (sum + newnum*Math.pow(16,i));


    }

    System.out.println(" HexaDecimal to Decimal conversion is" + sum);



}

public static void main (String [] args) {

hexDec("9F");

} }

0
Nancy Gupta
    Scanner sc = new Scanner(System.in);
    System.out.println("Enter the value");
    String s = sc.next();
    //String s = "AD";
    String s1 = s.toUpperCase();
    int power = 0;
    double result = 0;      
    char[] c = s1.toCharArray();
    for (int i = c.length-1; i >=0  ; i--) {
        boolean a = true;
        switch(c[i]){
        case 'A': c[i] = 10; a = false; break;
        case 'B': c[i] = 11; a = false; break;
        case 'C': c[i] = 12; a = false; break;
        case 'D': c[i] = 13; a = false; break;
        case 'E': c[i] = 14; a = false; break;
        case 'F': c[i] = 15; a = false; break;  
        }
        if(a==true){
            result = result + (c[i]-48) * Math.pow(16, power++);
       }else {
           result = result + (c[i]) * Math.pow(16, power++);
       }

    }
    System.out.println(result);
0
Deepu
int asciiOffset = 55;
char hex = 'A';  // Uppercase A-F
int val = hex - asciiOffset;
0
sonnykwe

Ceci est ma solution:

public static int hex2decimal(String s) {
    int val = 0;
    for (int i = 0; i < s.length(); i++) {
        char c = s.charAt(i);
        int num = (int) c;
        val = 256*val + num;
    }
    return val;
}

Par exemple, pour convertir 3E8 en 1000:

StringBuffer sb = new StringBuffer();
sb.append((char) 0x03);
sb.append((char) 0xE8);
int n = hex2decimal(sb.toString());
System.out.println(n); //will print 1000.
0
teteArg

Eh bien, Mr.ajb a résolu et signalé l'erreur dans votre code.

Venir à la deuxième partie du code, c’est-à-dire convertir une chaîne avec des lettres en entier décimal, constitue le code correspondant,

import Java.util.Scanner;

public class HexaToDecimal
{
   int number;

   void getValue()
   {
      Scanner sc = new Scanner(System.in);
      System.out.println("Please enter hexadecimal to convert: ");
      number = Integer.parseInt(sc.nextLine(), 16);
      sc.close();
   }

   void toConvert()
   {
      String decimal = Integer.toString(number);
      System.out.println("The Decimal value is : " + decimal);
   }

   public static void main(String[] args)
   {
      HexaToDecimal htd = new HexaToDecimal();
      htd.getValue();
      htd.toConvert();
   }
}

Vous pouvez vous référer à l'exemple sur hexadécimal à décimal pour plus d'informations.

0
Shiva

Voici une petite bibliothèque qui devrait vous aider avec les hexadécimaux en Java: https://github.com/PatrykSitko/HEX4J

Il peut convertir de et en hexadécimaux. Elle supporte:

  • byte
  • boolean
  • char
  • char[]
  • String
  • short
  • int
  • long
  • float
  • double (signé et non signé)

Avec cela, vous pouvez convertir votre chaîne en hexadécimal et l'hexadécimal en float/double.

Exemple: 

String hexValue = HEX4J.Hexadecimal.from.String("Hello World");
double doubleValue = HEX4J.Hexadecimal.to.Double(hexValue);
0
Patryk Sitko

Puisqu'il n'y a pas d'approche brute-force qui (fait avec elle manuellement). Pour savoir ce qui s'est passé exactement.

Étant donné un nombre hexadécimal 

KₙKₙ₋₁Kₙ₋₂ .... K₂K₁K₀

La valeur décimale équivalente est:

Kₙ * 16ₙ + Kₙ₋₁ * 16ₙ₋₁ + Kₙ₋₂ * 16ₙ₋₂ + .... + K₂ * 16₂ + K₁ * 16₁ + K₀ * 16₀

Par exemple, le nombre hexadécimal AB8C est: 

10 * 16₃ + 11 * 16₂ + 8 * 16₁ + 12 * 16₀ = 43916

La mise en oeuvre:

 //convert hex to decimal number
private static int hexToDecimal(String hex) {
    int decimalValue = 0;
    for (int i = 0; i < hex.length(); i++) {
        char hexChar = hex.charAt(i);
        decimalValue = decimalValue * 16 + hexCharToDecimal(hexChar);
    }
    return decimalValue;
}
private static int hexCharToDecimal(char character) {
    if (character >= 'A' && character <= 'F')
        return 10 + character - 'A';
    else //character is '0', '1',....,'9'
        return character - '0';
}
0
user6490462
void htod(String hexadecimal)
{
    int h = hexadecimal.length() - 1;
    int d = 0;
    int n = 0;

    for(int i = 0; i<hexadecimal.length(); i++)
    {
        char ch = hexadecimal.charAt(i);
        boolean flag = false;
        switch(ch)
        {
            case '1': n = 1; break;
            case '2': n = 2; break;
            case '3': n = 3; break;
            case '4': n = 4; break;
            case '5': n = 5; break;
            case '6': n = 6; break;
            case '7': n = 7; break;
            case '8': n = 8; break;
            case '9': n = 9; break;
            case 'A': n = 10; break;
            case 'B': n = 11; break;
            case 'C': n = 12; break;
            case 'D': n = 13; break;
            case 'E': n = 14; break;
            case 'F': n = 15; break;
            default : flag = true;
        }
        if(flag)
        {
            System.out.println("Wrong Entry"); 
            break;
        }
        d = (int)(n*(Math.pow(16,h))) + (int)d;
        h--;
    }
    System.out.println("The decimal form of hexadecimal number "+hexadecimal+" is " + d);
}
0
Chandan

Vous pouvez utiliser cette méthode pour obtenir le chiffre:

public int digitToValue(char c) {
   (c >= '&' && c <= '9') return c - '0';
   else if (c >= 'A' && c <= 'F') return 10 + c - 'A';
   else if (c >= 'a' && c <= 'f') return 10 + c - 'a';
   return -1;
 }
0
cri_sys