Алфавит Base32, который является перекрывающим надмножеством шестнадцатеричного? (Математика / CS) - PullRequest
0 голосов
/ 20 февраля 2020

Возможно, это больше математический вопрос, но я нахожусь в тупике:

Допустим, у меня есть шестнадцатеричная строка 8-ди git. Это может представлять значения от 0 до 2 ^ 32-1. Теперь предположим, что я хочу получить строку 8-ди git другой базы, например base32. Можно ли построить алфавит для base32 (или другой базы), который является строгим расширенным набором шестнадцатеричных, так что любая шестнадцатеричная строка ниже 2 ^ 32-1 будет декодироваться через base32 до того же значения, и только большие значения> = 2 ^ 32 начинаются включение символов base32 вне шестнадцатеричного диапазона?

Другими словами, возможно ли «обновить» базу 16 до базы с более высоким номером, чтобы она была обратно совместима с шестнадцатеричными идентификаторами?

Ответы [ 2 ]

1 голос
/ 20 февраля 2020

Вы можете присваивать номера 8-символьным строкам по своему усмотрению.

Существует 2 32 8-символьные шестнадцатеричные строки, которым вы, безусловно, можете назначить их шестнадцатеричные значения.

Есть 2 40 8-символьные строки с символами, скажем, 0123456789ABCDEFGHJKMNPQRSTUVWXY. 2 32 - шестнадцатеричные строки, а оставшимся 2 40 - 2 32 строкам можно присвоить любые цифры, которые вам нравятся.

Вы выиграли ' однако, они не могут быть назначены им числами через «нормальную» десятичную систему, потому что шестнадцатеричное число требует «10», а не 32. Однако есть способы, которые не так сложны. Например, для 40-разрядного числа:

  1. Преобразование младших 32-разрядных символов в 8-разрядный шестнадцатеричный.
  2. Назначение одного из оставшихся бит каждому символу и каждому бит, добавьте «G» к соответствующему символу, изменив его диапазон с «0-F» на «G-Y»

Теперь у вас есть строка для каждого 40-разрядного числа, и меньше у них те же строки, что и у их шестнадцатеричных представлений.

1 голос
/ 20 февраля 2020

Я не уверен, правильно ли я вас понял; Пожалуйста, поправьте меня, если я ошибаюсь. В любом случае:

Шестнадцатеричный ди git (основание 16) представлен 4 битами. Его диапазон - 0000… 1111, представляющий цифры 0… F.
Шестнадцатеричная строка 8-ди git, таким образом, представлена ​​32 битами, которые могут представлять значения от 0 до 2 ^ 32-1. Его диапазон - 00000000… FFFFFFFF.

Давайте рассмотрим систему base 17, называемую здесь системой 17de c.
17de c di git (base 17) представлена ​​5 битами. Его диапазон составляет 00000… 11111, представляющий цифры 0… V (с использованием стандартного латинского алфавита).
Строка 8-ди git 17de c, таким образом, представлена ​​40 битами, которые могут представлять значения от 0 до 2 ^ 40-1. Его диапазон 00000000… VVVVVVVV.

Таким образом, hex и 17de c охватывают одинаковые битовые комбинации от 0 до 2 ^ 32-1. Таким образом, невозможно иметь систему счисления с более высокой базой, которая побитово совместима с системой с более низкой базой.

Взять, например, значение 10000.
Шестнадцатеричное представление 10000 равно 10.
17de c представление 10000 - это G.
Нет способа сделать это совместимым.

...