我是一个编程新手,所以请保持友好:)
我刚刚编写了一个将十六进制String转换为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);

最佳答案

因为你正在这样做

if(hexString.contains("-"))


对于hexString字符串中的每个char,则转换的最终符号将计算为


如果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);

07-25 23:35
查看更多