Java 字符串十六进制到十进制整数/正转负

Java 字符串十六进制到十进制整数/正转负,java,string,hex,decimal,Java,String,Hex,Decimal,我是一个编程新手,所以请友善一点:) 我刚刚编写了一个程序,将十六进制字符串转换为dec int。我用“负”十六进制进行了测试,有些值是正确的,有些值是错误的。我不能用错误的输出解决问题 这是我的代码: String abc = "0123456789ABCDEF"; String hexString = "-ffad"; int decResult = 0; //int endRes = 0; hexString = hexString.toUpper

我是一个编程新手,所以请友善一点:) 我刚刚编写了一个程序,将十六进制字符串转换为dec int。我用“负”十六进制进行了测试,有些值是正确的,有些值是错误的。我不能用错误的输出解决问题

这是我的代码:

    String abc = "0123456789ABCDEF";
    String hexString = "-ffad";
    int decResult = 0;
    //int endRes = 0;

    hexString = hexString.toUpperCase();

    for(int i = 0; i < hexString.length(); i++)
    {
        if(hexString.contains("-"))
        {
            hexString = hexString.replace("-", "");
            char res = hexString.charAt(i);
            int d = abc.indexOf(res);
            decResult = (16*decResult + d)*(-1);
        }
        else
            {
                char res = hexString.charAt(i);
                int d = abc.indexOf(res);
                decResult = ((16*decResult) + d)*1;
            }
    }
    System.out.println(decResult);
String abc=“0123456789ABCDEF”;
字符串hexString=“-ffad”;
int decResult=0;
//int-endRes=0;
hexString=hexString.toUpperCase();
对于(int i=0;i
既然您正在这样做

if(hexString.contains("-"))
对于hexString字符串中的每个字符,转换的最终符号将计算为

  • 如果hexString.length()为奇数,则为负
  • 否则是肯定的
改进的工作解决方案可以是:

    hexString = hexString.toUpperCase();
    int sign = hexString.charAt(0) == '-' ? -1 : 1;
    hexString = hexString.replace("-", "");
    decResult = Integer.parseInt(hexString, 16) * sign;
    System.out.println(decResult);
hexString.replace(“-”,”)
仍然是一个不必要地处理所有字符的操作(并导致某些格式错误的输入保持不被注意)。如果(sign)hexString=hexString.substring(1),则应该是
。但是,当然,如果您要使用
Integer.parseInt(hexString,16)
无论如何,无论是大写转换还是负号的特殊处理,都没有任何意义,因为
Integer.parseInt(“-ffad”,16)
已经完成了这项工作。