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 AB8C
is 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)