2013-10-14 79 views
0

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

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

输出约我在做什么任何想法错误?

+1

你为什么不打印中间结果,并将它们与你所期望的比较? –

+0

有时你八输入转换为2位二进制字符串,有时一个3位二进制字符串。我想这可能是相关的。 –

+0

也有可能在第二部分“无用”的替代品。 –

回答

0

您可能认为这不是

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

我看到两个问题:

  1. 当从八进制到二进制转换0-3,你需要的是0领先目前,您的代码更改八进制10二进制0100,这是不正确的(你已经变成8进4)。
  2. 当您从二进制解析为十六进制时,如果您只是进行替换,解析00000001的结果可能会在随后的调用中得到解析。举例来说,如果你有00000010,它会首先将其更改为00010,然后10和停止,当它应该被解析成2

尽管可以修补它们,但@asantaballa是正确的,Integer.toHexString(Integer.parseInt(user_input, 8))与你试图让你的代码做同样的事情。

相关问题