Какова цель шестнадцатеричного кодирования для двоичных данных?
-
06-07-2019 - |
Вопрос
Мне немного любопытно, почему можно использовать шестнадцатеричное кодирование поверх base64. Мне кажется, что база 64 более эффективна. В частности, почему базы данных всегда используют шестнадцатеричное кодирование? Это историческая проблема, или я что-то упускаю из шестнадцатеричного кодирования?
Решение
Вы должны быть настоящим фанатом, чтобы читать BASE64
с экрана.
В Oracle
, когда я запускаю HEXTORAW
, я могу получить некоторое представление о том, что находится в поле RAW
, но я не смог с <код> BASE64 код>.
Например, когда я вижу много 0x3F
, я знаю, что есть что-то с кодировкой.
И внутренне, это просто двоичные байты, больше нет необходимости кодировать их, кроме как показать человеку на другой стороне экрана.
Другие советы
Это хороший компромисс между эффективным использованием пространства и удобочитаемостью. Битовые паттерны становятся очень очевидными в шестнадцатеричном формате, в то время как другие базы не так ясны.
что легче читать, 0x8080 или 32896? Я бы сказал, что шестнадцатеричное значение.
Он также имеет свойство nice, согласно которому каждая шестнадцатеричная цифра равна полубайту (следовательно, каждая пара равна байту).
Гораздо проще понять смысл гексагона в вашей голове, чем основанием 64.
Что касается базы данных, помните, что существует разница между отображением данных и их хранением. Скорее всего, данные просто отображаются в шестнадцатеричном виде.
Base64 не работает, если вы хотите использовать полученные значения в качестве имен файлов в Windows, потому что base64 использует как прописные, так и строчные буквы. Я уверен, что бывают и другие случаи, когда его нельзя использовать по аналогичным причинам.
Согласитесь с другими ответами относительно читабельности: шестнадцатеричные цифры хорошо совпадают на 8-битных байтах, а base64 " цифры " нет, и одна цифра может содержать части двух байтов.
В случае хранения строк (с «потенциально» безопасным кодированием XML) вы могли бы получить еще большую эффективность с ASCII 85, так как это раздувание 5/4 вместо 4/3 для base64.
Но еще труднее "прочитать" затем base64. И не многие приложения поддерживают его, поэтому вам часто приходится писать собственные классы / функции для кодирования и декодирования.
Я бы предположил, что ваша база данных действительно хранит данные в двоичном виде, но редактор запросов покажет их с использованием шестнадцатеричного кодирования. Это то, что будет делать SQL Server Query Analyzer.
Я полагаю, это просто вопрос личных предпочтений ... Шестнадцатеричное намного проще для меня, чем читать что-то в Base32 или Base64