将hex字符串转换为十进制整数

我写了一些代码将我的hex显示字符串转换为十进制整数。 但是,当输入类似于100a或625b(带字母的东西)时,我得到如下错误:

java.lang.NumberFormatException:对于java.lang.Integer.parseInt(未知来源)的java.lang.NumberFormatException.forInputString(未知来源)的输入字符串:“100a”

你知道我怎么能用字母转换成十进制整数的字符串?

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

看起来你的字符串中有一个额外的空格字符。 您可以使用trim()删除前导和尾随空格:

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

或者,如果您认为空格的存在意味着其他错误,您将不得不自己查看它,因为我们没有其余的代码。

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

这是我在互联网上找到的最有效和最优雅的解决方案。 这里提供的其他一些解决方案并不总是对我有用。

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

我的方式:

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

这是我的解决方案:

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

例如,要将3E8转换为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. 

公共类Hex2Decimal {

 public static void hexDec(String num) { int sum=0; int newnum = 0; String digit = num.toUpperCase(); for(int i=0;i 

public static void main(String [] args){

 hexDec("9F"); 

}}

您可以使用此方法获取数字:

 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; } 
 void htod(String hexadecimal) { int h = hexadecimal.length() - 1; int d = 0; int n = 0; for(int i = 0; i 

因为没有蛮力的方法(用它做手工)。 要知道究竟发生了什么。

给定hex数

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

等效的十进制值是:

Kₙ*16ₙ+Kₙ₋1*16ₙ₋1+Kₙ₋2*16ₙ₋2+ …. +K₂* 16 2 + K 1 * 16 1 + K 0 * 16 0

例如,hex数AB8C是:

10 * 16 3 + 11 * 16 2 + 8 * 16 1 + 12 * 16 0 = 43916

执行:

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

好吧,Mr.ajb已经解决并指出了代码中的错误。

来到代码的第二部分,即将字母转换为十进制整数的字符串就是代码,

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

您可以将hex的示例引用到十进制以获取更多信息。

 int asciiOffset = 55; char hex = 'A'; // Uppercase AF int val = hex - asciiOffset; 
  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);