Прямое преобразование базы 36 в базу 16? - PullRequest
1 голос
/ 10 марта 2011

Опишите процесс преобразования номера base36 в base16 без преобразования в base10 в качестве посредника.

Ответы [ 2 ]

2 голосов
/ 10 марта 2011

Предполагая, что у вас есть функция f для преобразования одной цифры base-36 в base-16, вы можете определить рекурсивную функцию преобразования c следующим образом: Для номера base-36 с цифрами a_n ... a_1n > 1 return f(a_1) + 24_16*c(a_n ... a_2) (так как 36 представлено как "24" в base-16);для номера base-36 a_1 только с одной цифрой просто верните f(a_1).Это, очевидно, предполагает, что вы можете выполнять арифметику в base-16.

Конечно, реальная проблема здесь - выполнение арифметики в base-16, поэтому вы обычно делаете базовые преобразования через некоторую промежуточную базуделать арифметику в;то есть база-10 на бумаге и база-2 в компьютере.

Обратите внимание, что преобразование из базы-2 в базу-16 - это очень простая операция.Поскольку 16 - это степень 2, вам не нужно выполнять арифметику: вы можете выполнять преобразование цифра за цифрой (точнее, 4 цифры на 4 цифры).

1 голос
/ 10 марта 2011

Да, вы МОЖЕТЕ сделать это напрямую, но вам нужно сделать арифметику в базе 16. Хитрость заключается в том, чтобы предварительно вычислить значение 36, 36 ^ 2, 36 ^ 3 и т. Д. В базе 16. Например, преобразовать число, представленное как 237 в базе 36, в число в базе 16.

Простой подход состоит в том, чтобы сделать преобразование в десятичную или любую промежуточную систему, где вы можете делать арифметику. Таким образом, я мог бы сделать это как

2 * 36 ^ 2 + 3 * 36 + 7 = 2707 (десятичное число)

Затем конвертируем в гекс из десятичного числа, получая

10 * 16 ^ 2 + 9 * 16 + 3 = A93 (hex)

Прямое решение достаточно просто. Я сделал это таким образом, чтобы убедить вас, что в этом нет необходимости. Просто вычислите (заранее) значение 36 ^ 2 в шестнадцатеричном формате. Таким образом,

36 ^ 2 = 510 (гекс)

36 = 24 (гекс)

Сохраните эти предварительно вычисленные значения. Теперь сделайте все ваши вычисления в шестнадцатеричном виде.

237 (база 36) = 2 * 510 + 3 * 24 + 7 (шестнадцатеричное)

Сделайте это последнее расширение в шестнадцатеричной арифметике, и вы должны получить A93 в шестнадцатеричном. Вы выполнили вычисления по желанию полностью в гекс, не прибегая к промежуточной базе. Даже предварительное вычисление этих степеней 36 может быть сделано в шестнадцатеричном виде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...