八进制转换为十六进制错误

时间:2013-10-14 16:49:35

标签: java string binary hex octal

我一直在尝试编写一个程序,它将八进制转换为二进制,然后是十六进制,但问题是我得到了错误的答案。实际转换的代码如下:

    user_input=user_input.replace("0", "00");
    user_input=user_input.replace("1", "01");
    user_input=user_input.replace("2", "10");
    user_input=user_input.replace("3", "11");
    user_input=user_input.replace("4", "100");
    user_input=user_input.replace("5", "101");
    user_input=user_input.replace("6", "110");
    user_input=user_input.replace("7", "111");

    if (!(user_input.length()-1 % 4 ==0)){
        user_input = "00" + user_input; }


    user_input=user_input.replace("0000", "0");
    user_input=user_input.replace("0001", "1");
    user_input=user_input.replace("0010", "2");
    user_input=user_input.replace("0011", "3");
    user_input=user_input.replace("0100", "4");
    user_input=user_input.replace("0101", "5");
    user_input=user_input.replace("0110", "6");
    user_input=user_input.replace("0111", "7");
    user_input=user_input.replace("1000", "8");
    user_input=user_input.replace("1001", "9");
    user_input=user_input.replace("1010", "A");
    user_input=user_input.replace("1011", "B");
    user_input=user_input.replace("1100", "C");
    user_input=user_input.replace("1101", "D");
    user_input=user_input.replace("1110", "E");
    user_input=user_input.replace("1111", "F");

我的密钥使用数字1057,它应该转换为22F,但我的输出为12F

对我做错了什么的想法?

2 个答案:

答案 0 :(得分:0)

你可能会考虑这个

int user_input_dec = Integer.parseInt(user_input,8);
String hex = Integer.toHexString(user_input_dec);

答案 1 :(得分:0)

我看到两个问题:

  1. 当将0-3从八进制转换为二进制时,您需要前导0.目前,您的代码将八进制10更改为二进制0100,这是不正确的(您已将8变为4)
  2. 当您从二进制解析为十六进制时,如果您只是进行替换,则解析00000001的结果可能会在后续调用中被解析。例如,如果您有00000010,则首先将其更改为00010,然后将10更改为2并停止,此时应将其解析为Integer.toHexString(Integer.parseInt(user_input, 8))
  3. 虽然可以对它们进行修补,但@asantaballa是正确的,{{1}}与您尝试让代码执行的操作相同。