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

Java 八进制转换为十六进制错误,java,string,binary,hex,octal,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("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


你知道我做错什么了吗?< /P> < P>你可以考虑这个而不是< /P>
int user_input_dec = Integer.parseInt(user_input,8);
String hex = Integer.toHexString(user_input_dec);
我看到两个问题:

  • 当将0-3从八进制转换为二进制时,需要前面的0。目前,您的代码将八进制
    10
    更改为二进制
    0100
    ,这是不正确的(您已将8变为4)
  • 从二进制解析为十六进制时,如果只进行替换,则解析
    0000
    0001
    的结果可能会在后续调用中被解析。例如,如果您有
    00000010
    ,它将首先将其更改为
    00010
    ,然后
    10
    ,并在将其解析为
    2
    时停止

  • 虽然可以修补这些代码,@asantabala是对的,
    Integer.toHexString(Integer.parseInt(user_input,8))
    的操作与您试图让代码执行的操作相同。

    为什么不打印中间结果并与预期结果进行比较呢?您有时会将八进制输入转换为2位二进制字符串,有时会转换为3位二进制字符串。我想这可能有关系。第二部分也可能有“不想要的”替换。