java写的十六进制转化为十进制,类型转换char->int出错

用java写的十六进制转化为十进制,输入以后十六进制中的数字(1、2这种)转化完了是负数!改用先是asc码再剪去数字都不行(比如说减‘0’、直接强制转换之类的),也是负数!求解!图二是输入后的错误结果:输入1A,输出-6 10

十六进制转换成十进制,必须先把十六进制转换成二进制,给你看一下我写的代码:
import java.util.Scanner;
public class test{
//判断一个字符串是否是一个十六进制的字符串
private static boolean isXNumber(String str){
int count = 0;
str = str.toUpperCase(); //如果输入小写字符就转成大写字母
for (int i = 0; i < str.length(); i++) {
if (((int)str.substring(i, i+1).charAt(0)>=48&&(int)str.substring(i, i+1).charAt(0)<=57)||
((int)str.substring(i, i+1).charAt(0)>=65&&(int)str.substring(i, i+1).charAt(0)<=70)) {
count++;
}
}
if (count==str.length()) {
return true;
}else {
return false;
}
}
//将十六进制字符串转成二进制字符串
private static String XNumberToBNumber(String str){
String temp="";
if (isXNumber(str)==true) {
for (int i = 0; i < str.length(); i++) {
if (str.substring(i, i+1).charAt(0)=='0') {
temp+="0000";
}else if (str.substring(i, i+1).charAt(0)=='1') {
temp+="0001";
}else if (str.substring(i, i+1).charAt(0)=='2') {
temp+="0010";
}else if (str.substring(i, i+1).charAt(0)=='3') {
temp+="0011";
}else if (str.substring(i, i+1).charAt(0)=='4') {
temp+="0100";
}else if (str.substring(i, i+1).charAt(0)=='5') {
temp+="0101";
}else if (str.substring(i, i+1).charAt(0)=='6') {
temp+="0110";
}else if (str.substring(i, i+1).charAt(0)=='7') {
temp+="0111";
}else if (str.substring(i, i+1).charAt(0)=='8') {
temp+="1000";
}else if (str.substring(i, i+1).charAt(0)=='9') {
temp+="1001";
}else if (str.substring(i, i+1).charAt(0)=='A') {
temp+="1010";
}else if (str.substring(i, i+1).charAt(0)=='B') {
temp+="1011";
}else if (str.substring(i, i+1).charAt(0)=='C') {
temp+="1100";
}else if (str.substring(i, i+1).charAt(0)=='D') {
temp+="1101";
}else if (str.substring(i, i+1).charAt(0)=='E') {
temp+="1110";
}else if (str.substring(i, i+1).charAt(0)=='F') {
temp+="1111";

}}
}
return temp;
}
public static void main(String[] args) {
System.out.print("请输入一个十六进制数:");
String XNumner= new Scanner(System.in).next();
if (isXNumber(XNumner)==false) {
System.out.println("你输入的不是一个十六进制数!");
}else{
int sum = 0;
int count = XNumberToBNumber(XNumner).length() - 1;
for (int i = 0; i < XNumberToBNumber(XNumner).length(); i++) {
sum+=(Integer.parseInt(XNumberToBNumber(XNumner).substring(i,i+1))*(int)Math.pow(2, count));
count--;
}
System.out.print("十六进制数:"+XNumner+",对应的十进制数是:"+sum);
}
}
}
温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网