Преобразовать строку BASE64 в строку BASE16 (HEX)? - PullRequest
5 голосов
/ 04 апреля 2011

Эй, я пытаюсь написать программу для преобразования строки BASE64 в строку BASE16 (HEX).

Вот пример:

     BASE64:   Ba7+Kj3N
HEXADECIMAL:   05 ae fe 2a 3d cd
     BINARY:   00000101 10101110 11111110 00101010 00111101 11001101
    DECIMAL:   5 174 254 42 61 205

Какую логику конвертировать из BASE64 в HEXIDECIMAL?
Почему десятичное представление разделено?
Как получилось, что двоичное представление разбито на 6 секций?

Просто хочу математику, код, который я могу обработать, просто этот процесс сбивает меня с толку. Спасибо:)

Ответы [ 2 ]

8 голосов
/ 04 апреля 2011

Вот список функций, которые будут конвертироваться между любыми двумя базами: https://sites.google.com/site/computersciencesourcecode/conversion-algorithms/base-to-base


Редактировать (Надеюсь, что это будет совершенно ясно ...)

Вы можете найти больше информациина это в записи Википедии для Base 64 .

Обычный набор символов, используемый для Base 64, который отличается от набора символов, который вы найдете в ссылке, которую я предоставил доизменить это:

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/

Символ «A» - это значение 0, «B» - это значение 1, «C» - это значение 2, ... «8'- это значение 60,' 9 '- это значение 61,' + '- это значение 62, а' / '- это значение 63. Этот набор символов сильно отличается от того, что мы привыкли использовать для двоичного, восьмеричного,основание 10 и шестнадцатеричное, где первый символ равен '0', что представляет значение 0 и т. д.

Соджу отметил в комментариях к этому ответу, что для каждой двоичной цифры 64 требуется 6 бит, чтобы представить ее в двоичном виде,Используя число base 64, представленное в исходном вопросе, и преобразовав из base 64 в двоичное, мы получим:

B        a        7        +        K        j        3        N
000001   011010   111011   111110   001010   100011   110111   001101

Теперь мы можем собрать все биты вместе (пробелы существуют только для того, чтобы помочь людям прочитать число):

000001011010111011111110001010100011110111001101

Далее мы можем вводить новые разделители пробелов каждые четыре бита, начиная с Наименее значимый бит :

0000  0101  1010  1110  1111  1110  0010  1010  0011  1101  1100  1101

Теперь оно должно быть оченьлегко увидеть, как это число преобразуется в основание 16:

0000  0101  1010  1110  1111  1110  0010  1010  0011  1101  1100  1101
0     5     A     E     F     E     2     A     3     D     C     D
0 голосов
/ 14 сентября 2014

думать о базе-64 как о базе (2 ^ 6) так что для выравнивания по шестнадцатеричному клеву вам нужно как минимум 2 базовых 64 цифры ...

с двумя 64-значными цифрами у вас есть базовое число (2 ^ 12), которое может быть представлено 3 2 ^ 4 цифрами ...

(00)(01)(02)(03)(04)(05)---(06)(07)(08)(09)(10)(11) (base-64) maps directly to:

(00)(01)(02)(03)---(04)(05)(06)(07)---(08)(09)(10)(11) (base 16)

так что вы можете либо преобразовать в непрерывный двоичный файл ... либо использовать 4 операции ... операции могут иметь дело с двоичными значениями, либо они могут использовать набор справочных таблиц (которые могут работать с цифрами в кодировке):

  1. от первой цифры от 64 до первой шестнадцатеричной цифры
  2. первая цифра от 64 до первой половины второй шестнадцатеричной цифры
  3. вторая цифра от 64 до второй половины второй шестнадцатеричной цифры
  4. вторая цифра от 64 до третьей шестнадцатеричной цифры.

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

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