提问者:小点点

从十六进制转换为二进制,二进制转换为十六进制,不使用转换,读取txt文件查找RAM错误


我正在尝试创建一个java程序,该程序将计算机中RAM位置的十六进制可能错误转换为十六进制。然后从十六进制切换到二进制,从二进制切换到十进制,以查找RAM损坏的位置。这是我到目前为止的代码:

public class Practice {

private static String result;
private static int j;

public static void hexToBinary() throws IOException {
Scanner infile = new Scanner(new File("RAMerrors.txt"));

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

  }

 }

public static void binaryToDecimal() {
    double j=0;
for(int i=0;i<result.length();i++)
{
    if(result.charAt(i)== '1')
    {
     j= j + Math.pow(2, result.length()-1-i);
    }

}
System.out.println("Decimal value: " + j);

}




public static void main(String arg[]) throws IOException {

    hexToBinary();
    binaryToDecimal();
}

}

十六进制到二进制很好。十进制部分只显示一个数字(它不是正确的值)。不确定要使用什么循环或如何运行二进制到十进制部分。提前感谢您的任何建议!txt文件有以下值:

ABCDEFABC
1A00D0000
7A0EDF301
3CDAEFFAD

共1个答案

匿名用户

好的,我不清楚你的问题。你只得到一个数字的原因是你从main调用hexToBines,用这个方法循环遍历整个文件,然后返回main。之后,你调用binaryToDecimal它打印出结果的值,这是它从hexToBines获得的最后一个值。
你需要做的是从文件中读取一个值,将其转换为二进制,然后转换为十进制,然后继续下一个值。一种方法是这样做的:
更改您的方法以返回值并获取参数。
hexToBines应该是-

public static String hexToBinary(String hex) throws IOException {
    String result = "";
    String binVal; // the binary value of the Hex
    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;
    }
    return result;
  }

binaryToDecimal应该是-

public static Double binaryToDecimal(String result) {
    double j=0;
for(int i=0;i<result.length();i++)
{
    if(result.charAt(i)== '1')
    {
     j= j + Math.pow(2, result.length()-1-i);
    }

}
return j;
}

main将读取文件,将值传递给两个方法并打印结果:

    public static void main(String args[]) throws IOException {

    Scanner infile = new Scanner(new File("RAMerrors.txt"));
    String result;
    Double decimal;

    while (infile.hasNextLine()) {
        String line = infile.nextLine();
        Scanner input = new Scanner(line);
        String hex = input.next();
        result = hexToBinary(hex);
        System.out.println("Binary of " + hex + ":" + result);
        decimal = binaryToDecimal(result);
        System.out.println("Decimal value: " + decimal);            
    }

输出是

ABCDEFABC的二进制:101010111100110111101111101010111100十进制值:4.6118402748E10 1A00D0000的二进制:000110100000000011010000000000000000十进制值:6.980173824E9 7A0EDF301的二进制:011110100000111011011111001100000001十进制值:3.2764719873E10 3CDAEFFAD的二进制:001111001101101011101111111110101101十进制值:1.6335699885E10

希望这对你有帮助。