het converteren van hexadecimale reeks naar decimaal geheel getal

Ik heb een code geschreven om mijn hexadecimale display-string om te zetten naar decimaal geheel getal. Toen de input zoiets is als 100A of 625b (iets met letter) kreeg ik als volgt een fout:

java.lang.numberformatexception: voor invoerreeks: “100A” op
java.lang.numberformatexception.forInputstring (onbekende bron) bij
java.lang.integer.parseint (onbekende bron)

Heeft u enig idee hoe kan ik mijn string omzetten met letters naar decimaal geheel getal?

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

Antwoord 1, Autoriteit 100%

Het lijkt erop dat er een extra ruimte-teken in je string is. U kunt trim()gebruiken om voorloop- en achterruimtes te verwijderen:

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

of als je denkt dat de aanwezigheid van een ruimte betekent dat er iets anders verkeerd is, moet je er zelf naar kijken, omdat we niet de rest van je code hebben.


Antwoord 2, Autoriteit 30%

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

Dat is de meest efficiënte en elegante oplossing die ik via internet heb gevonden. Sommige van de andere oplossingen die hier worden gegeven, werkten niet altijd voor mij.


Antwoord 3, autoriteit 7%

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

Antwoord 4, autoriteit 5%

Op mijn manier:

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

Antwoord 5, autoriteit 2%

Dit is mijn oplossing:

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

Bijvoorbeeld om 3E8 naar 1000 te converteren:

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

Antwoord 6, autoriteit 2%

U kunt deze methode gebruiken om het cijfer te krijgen:

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

Antwoord 7, autoriteit 2%

Omdat er geen brute-force benadering is die (handmatig gedaan). Om te weten wat er precies is gebeurd.

Gegeven een hexadecimaal getal

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

De equivalente decimale waarde is:

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

Het hexadecimale getal AB8Cis bijvoorbeeld:

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

Implementatie:

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

Antwoord 8, autoriteit 2%

Je zou kunnen profiteren van de ASCII-waarde voor elke letter en er 55 af kunnen halen, gemakkelijk en snel:

int asciiOffset = 55;
char hex = Character.toUpperCase('A');  // Only A-F uppercase
int val = hex - asciiOffset;
System.out.println("hexadecimal:" + hex);
System.out.println("decimal:" + val);

Uitvoer:
hexadecimaal:A
decimaal:10


Antwoord 9, autoriteit 2%

Nou, Mr.ajb heeft de fout in uw code opgelost en aangegeven.

Tot het tweede deel van de code, dat wil zeggen, het converteren van een string met letters naar een decimaal geheel getal hieronder is de code daarvoor,

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

Je kunt een voorbeeld raadplegen op hexadecimaal naar decimaalvoor meer informatie informatie.


Antwoord 10

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

Publieke statische void-main (string [] args) {

hexDec("9F");

}
}


Antwoord 11

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

Antwoord 12

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

Antwoord 13

Dit is een kleine bibliotheek die je zou moeten helpen met hexadecimalen in Java: https://github.com/PatrykSitko /HEX4J

Het kan van en naar hexadecimalen converteren. Het ondersteunt:

  • byte
  • boolean
  • char
  • char[]
  • String
  • short
  • int
  • long
  • float
  • double(ondertekend en niet-ondertekend)

Hiermee kunt u uw string omzetten naar hexadecimaal en de hexadecimale tot een float / double.

Voorbeeld:

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

Antwoord 14

Google heeft me hier gekregen, dus ik ben deze laat bij het bijwerken voor andere om te vinden bij het zoeken. Een veel eenvoudiger manier is om Biginteger te gebruiken, zoals SO:

BigInteger("625b", 16)

Other episodes