2013-10-14 3 views
0

Я пытаюсь закодировать программу, которая будет конвертировать восьмеричную в двоичную, а затем шестнадцатеричную, но проблема в том, что я получаю неправильный ответ. Код на самом деле преобразования выглядит следующим образом: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

Любая идея о том, что я делаю неправильно?

+1

Почему вы не печатаете промежуточные результаты и не сравниваете их с тем, что вы ожидаете? –

+0

Вы иногда конвертируете восьмеричный ввод в двузначную двоичную строку, иногда в трехзначную двоичную строку. Думаю, это может быть связано. –

+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. Когда вы анализируете из двоичного кода в шестнадцатеричный, если вы просто выполняете замену, результат разбора 0000 или 0001 может быть разобран при последующем вызове. Например, если у вас есть 00000010, он сначала изменит его на 00010, затем 10 и остановится, когда он должен был разобрать 2.

Хотя это возможно исправить, @asantaballa прав, Integer.toHexString(Integer.parseInt(user_input, 8)) делает то же самое, что и вы пытались получить код.

 Смежные вопросы

  • Нет связанных вопросов^_^