Восьмеричное преобразование в шестнадцатеричное неправильно
Я пытался закодировать программу, которая преобразует восьмеричное в двоичное, а затем шестнадцатеричное, но проблема в том, что я получаю неправильный ответ. Код для фактического преобразования выглядит следующим образом:
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 ответа
Вы могли бы рассмотреть это вместо
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
,
Хотя это можно исправить, @asantaballa прав, Integer.toHexString(Integer.parseInt(user_input, 8))
делает то же самое, что вы пытались заставить ваш код делать.