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()));
}
}
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.
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.
//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();
}
}
}
Auf meine Art:
private static int hexToDec(String hex) {
return Integer.parseInt(hex, 16);
}
ö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");
} }
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);
int asciiOffset = 55;
char hex = 'A'; // Uppercase A-F
int val = hex - asciiOffset;
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.
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.
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);
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';
}
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);
}
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;
}