Преобразование шестнадцатеричной строки в десятичное целое
Я написал код для преобразования шестнадцатеричной строки отображения в десятичное целое. Однако, когда ввод - это что-то вроде 100a или 625b (что-то с буквой), я получил ошибку:
java.lang.NumberFormatException: для строки ввода: "100a" в java.lang.NumberFormatException.forInputString (Неизвестный источник) в java.lang.Integer.parseInt (Неизвестный источник)
Вы знаете, как я могу преобразовать свою строку с буквами в десятичное целое?
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()));
}
}
Ответы
Ответ 1
Похоже, в вашей строке есть лишний символ. Вы можете использовать trim()
для удаления ведущих и завершающих пробелов:
temp1 = Integer.parseInt(display.getText().trim(), 16 );
Или, если вы считаете, что наличие пространства означает, что что-то еще не так, вам придется самому это изучить, так как у нас нет остальной части вашего кода.
Ответ 2
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;
}
Это самое эффективное и элегантное решение, которое я нашел через Интернет. Некоторые из других решений, предоставленных здесь, не всегда срабатывали для меня.
Ответ 3
//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();
}
}
}
Ответ 4
Мой путь:
private static int hexToDec(String hex) {
return Integer.parseInt(hex, 16);
}
Ответ 5
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);
}
Ответ 6
Это мое решение:
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.
Ответ 7
public class 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");
}}
Ответ 8
Вы можете использовать этот метод для получения цифры:
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;
}
Ответ 9
Поскольку нет подхода грубой силы, который (сделанный с ним вручную). Чтобы узнать, что именно произошло.
Учитывая шестнадцатеричное число
KₙKₙ₋₁Kₙ₋₂.... K₂K₁K₀
Эквивалентное десятичное значение:
Kₙ * 16ₙ + Kₙ₋₁ * 16ₙ₋₁ + Kₙ₋₂ * 16ₙ₋₂ +.... + K₂ * 16₂ + K₁ * 16₁ + K₀ * 16₀
Например, шестнадцатеричный номер AB8C
:
10 * 16₃ + 11 * 16₂ + 8 * 16₁ + 12 * 16₀ = 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';
}
Ответ 10
Ну, г-н Майджб решил и указал на ошибку в вашем коде.
Переход ко второй части кода, то есть преобразование строки с буквами в десятичное целое ниже, это код для этого,
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();
}
}
Для получения дополнительной информации вы можете ссылаться на пример шестнадцатеричного числа до десятичного.
Ответ 11
int asciiOffset = 55;
char hex = 'A'; // Uppercase A-F
int val = hex - asciiOffset;
Ответ 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);
Ответ 13
Это небольшая библиотека, которая должна помочь вам с шестнадцатеричными в Java: https://github.com/PatrykSitko/HEX4J
Он может конвертировать из и в шестнадцатеричные числа. Поддерживает:
-
byte
-
boolean
-
char
-
char[]
-
String
-
short
-
int
-
long
-
float
-
double
(подписанный и неподписанный)
С его помощью вы можете конвертировать вашу строку в шестнадцатеричное и шестнадцатеричное в число с плавающей запятой/двойной.
Пример:
String hexValue = HEX4J.Hexadecimal.from.String("Hello World");
double doubleValue = HEX4J.Hexadecimal.to.Double(hexValue);