Какова цель шестнадцатеричного кодирования для двоичных данных? - PullRequest
5 голосов
/ 18 июня 2009

Мне немного любопытно, почему можно использовать шестнадцатеричное кодирование поверх base64. Мне кажется, что база 64 более эффективна. В частности, почему базы данных всегда используют шестнадцатеричное кодирование? Это историческая проблема, или я что-то упускаю из шестнадцатеричного кодирования?

Ответы [ 6 ]

5 голосов
/ 18 июня 2009

Вы должны быть настоящим фанатом, чтобы читать BASE64 с экрана.

В Oracle, когда я запускаю HEXTORAW, я могу получить некоторое представление о том, что находится в поле RAW, но я не смог с BASE64.

Например, когда я вижу много 0x3F, я знаю, что есть что-то с кодировкой.

И внутренне, это просто двоичные байты, больше нет необходимости кодировать их, кроме как показать человеку на другой стороне экрана.

3 голосов
/ 18 июня 2009

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

что легче читать, 0x8080 или 32896? Я бы сказал, что шестнадцатеричное значение:

Он также имеет свойство nice, согласно которому каждая шестнадцатеричная цифра равна полубайту (следовательно, каждая пара равна байту).

Гораздо легче понять смысл гексагона в вашей голове, чем основание 64.

Что касается базы данных, помните, что существует разница между тем, как данные отображаются и как они хранятся. Скорее всего, данные просто отображаются в шестнадцатеричном виде.

2 голосов
/ 10 октября 2009

Base64 не работает, если вы хотите использовать результирующие значения в качестве имен файлов в Windows, потому что base64 использует как прописные, так и строчные буквы. Я уверен, что бывают и другие случаи, когда его нельзя использовать по аналогичным причинам.

Согласитесь с другими ответами относительно читабельности - шестнадцатеричные цифры хорошо совпадают на 8-битных байтах, в то время как цифры base64 - нет, и одна цифра может содержать части двух байтов.

1 голос
/ 23 ноября 2009

В случае хранения строк (с «потенциально» безопасным кодированием XML) вы могли бы получить еще большую эффективность с ASCII 85, поскольку это раздувание 5/4 вместо 4/3 для base64.

Но «читать» еще сложнее, чем base64. И не многие приложения поддерживают его так часто, что вам приходится писать собственные классы / функции для кодирования и декодирования.

0 голосов
/ 18 июня 2009

Я полагаю, что это просто вопрос личных предпочтений ... Мне гораздо легче читать Hex, чем что-то в Base32 или Base64

0 голосов
/ 18 июня 2009

Я думаю, ваша база данных действительно хранит данные в двоичном виде, но редактор запросов покажет их с использованием шестнадцатеричного кодирования. Это то, что будет делать SQL Server Query Analyzer.

...