2013-10-14 81 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))與你試圖讓你的代碼做同樣的事情。

相關問題