wake-up-neo.com

Konvertieren einer Hexadezimalzeichenfolge in eine dezimale Ganzzahl

Ich habe etwas Code geschrieben, um meine hexadezimale Anzeige in eine dezimale Ganzzahl zu konvertieren. Wenn die Eingabe jedoch etwa 100a oder 625b (etwas mit Buchstaben) ist, wurde eine Fehlermeldung wie folgt angezeigt: 

Java.lang.NumberFormatException: Für die Eingabezeichenfolge: "100a" um Java.lang.NumberFormatException.forInputString (unbekannte Quelle) um Java.lang.Integer.parseInt (unbekannte Quelle)

Haben Sie eine Idee, wie ich meine Zeichenfolge mit Buchstaben in eine Dezimalzahl umwandeln kann?

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

Es sieht so aus, als ob Ihre Zeichenfolge ein zusätzliches Leerzeichen enthält. Sie können trim() verwenden, um führende und nachgestellte Leerzeichen zu entfernen:

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

Oder wenn Sie der Meinung sind, dass die Anwesenheit eines Leerzeichens bedeutet, dass etwas anderes nicht stimmt, müssen Sie sich selbst darum kümmern, da wir nicht den Rest Ihres Codes haben.

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

Das ist die effizienteste und eleganteste Lösung die ich über das Internet gefunden habe . Einige der anderen Lösungen, die hier zur Verfügung gestellt wurden, funktionierten nicht immer für mich.

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

Auf meine Art:

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

öffentliche Klasse 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

Das ist meine Lösung:

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

Zum Beispiel, um 3E8 in 1000 zu konvertieren:

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

Nun, Mr.ajb hat den Fehler in Ihrem Code behoben und darauf hingewiesen.

Wenn Sie zum zweiten Teil des Codes gelangen, dh eine Zeichenfolge mit Buchstaben in eine Dezimalzahl konvertieren, ist dies der Code.

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

Sie können beispielsweise auf hexadezimal bis dezimal verweisen, um weitere Informationen zu erhalten.

0
Shiva

Dies ist eine kleine Bibliothek, die Ihnen bei der Verwendung von Hexadezimalen in Java helfen sollte: https://github.com/PatrykSitko/HEX4J

Es kann von und zu Hexadezimalen konvertieren. Es unterstützt:

  • byte
  • boolean
  • char
  • char[]
  • String
  • short
  • int
  • long
  • float
  • double (signiert und unsigniert)

Damit können Sie Ihren String in Hexadezimal und das Hexadezimal in Float/Double konvertieren.

Beispiel: 

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

Da gibt es keine brutale Annäherung welche (manuell damit gemacht). Um zu wissen, was genau passiert ist.

Eine hexadezimale Zahl angegeben 

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

Der äquivalente Dezimalwert ist:

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

Die Hex-Nummer AB8C lautet beispielsweise: 

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

Implementierung:

 //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

Sie können diese Methode verwenden, um die Ziffer zu erhalten:

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