Восьмеричное преобразование в шестнадцатеричное неправильно

Я пытался закодировать программу, которая преобразует восьмеричное в двоичное, а затем шестнадцатеричное, но проблема в том, что я получаю неправильный ответ. Код для фактического преобразования выглядит следующим образом:

    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);

Я вижу две проблемы:

  1. При преобразовании 0-3 из восьмеричного в двоичное число вам нужно, чтобы начальное 0. В настоящее время ваш код меняет восьмеричное 10 в двоичный 0100, что неверно (вы превратили 8 в 4).
  2. Когда вы анализируете двоичный код в шестнадцатеричный, если вы просто делаете замену, результат разбора 0000 или же 0001 может быть проанализирован при последующем вызове. Например, если у вас есть 00000010, это сначала изменит его на 00010, затем 10 и остановить, когда он должен был быть проанализирован в 2,

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

Другие вопросы по тегам