从文件转换十六进制字符串的输出错误

时间:2015-09-30 20:32:18

标签: java

我的代码输出有问题。我必须将十六进制字符串从文件转换为二进制,然后将二进制转换为十进制。然后找到芯片中的RAM错误,我还没有编码。我现在主要担心的是,当我运行程序时,我的第一个结果是正确的,但是对于其余的3进制到二进制输出,二进制字符串将自身附加到前面的二进制输出,它变成了一个长而错的二进制字符串。 / p>

public static void main(String arg[]) throws IOException {
    Scanner infile = new Scanner(new File("RAMerrors.txt"));

    String result = "";
    String binVal; // the binary value of the Hex

    while (infile.hasNextLine()) {
        String line = infile.nextLine();
        Scanner input = new Scanner(line);
        String hex = input.next();

        for (int i = 0; i < hex.length(); i++) {
            char hexChar = hex.charAt(i);

            switch (hexChar) {
                case ('0'):
                    binVal = "0000";
                    break;
                case ('1'):
                    binVal = "0001";
                    break;
                case ('2'):
                    binVal = "0010";
                    break;
                case ('3'):
                    binVal = "0011";
                    break;
                case ('4'):
                    binVal = "0100";
                    break;
                case ('5'):
                    binVal = "0101";
                    break;
                case ('6'):
                    binVal = "0110";
                    break;
                case ('7'):
                    binVal = "0111";
                    break;
                case ('8'):
                    binVal = "1000";
                    break;
                case ('9'):
                    binVal = "1001";
                    break;
                case ('A'):
                    binVal = "1010";
                    break;
                case ('B'):
                    binVal = "1011";
                    break;
                case ('C'):
                    binVal = "1100";
                    break;
                case ('D'):
                    binVal = "1101";
                    break;
                case ('E'):
                    binVal = "1110";
                    break;
                case ('F'):
                    binVal = "1111";
                    break;
                default:
                    binVal = "invalid input";
                    break;
            }
            result += binVal;
        }
        System.out.println("Binary of " + hex + ":" + result);
        System.out.println("And the decimal is " + convertBin2Dec(result) + "\n");
    }
}

我的输出看起来像:

  

ABCDEFABC二进制文件:101010111100110111101111101010111100
  小数是46118402748

     

1A00D0000的二进制:101010111100110111101111101010111100000110100000000011010000000000000000
  小数是9223372036854775807

     

7A0EDF301的二进制数:101010111100110111101111101010111100000110100000000011010000000000000000011110100000111011011111001100000001
  小数是9223372036854775807

     

3CDAEFFAD二进制:101010111100110111101111101010111100000110100000000011010000000000000000011110100000111011011111001100000001001111001101101011101111111110101101
  小数是9223372036854775807

1 个答案:

答案 0 :(得分:2)

您没有在支票之间清算result变量。

如果你在while循环中声明result,它应该可以解决你的问题。