Преобразование hex в двоичный файл в MySQL

В настоящее время я ищу функцию в MySQL для преобразования между шестнадцатеричной строкой в ​​двоичное представление, например:

0000 -> 0000000000000000
00AA -> 0000000010101010
FFFF -> 1111111111111111

Я уже пробовал

UNHEX('00AA')
CAST('00AA' AS BINARY)
CONVERT('00AA', BINARY)

но не получил желаемых результатов.

Ответ 1

Используйте функцию CONV():

CONV(string, 16, 2)

Чтобы иметь длину в соответствии с вводом:

LPAD(CONV(string, 16, 2), LENGTH(string)*4, '0')

Поскольку CONV() работает с 64-битной точностью, вы не можете конвертировать более 64 бит, поэтому вы также можете использовать это:

LPAD(CONV(string, 16, 2), 64, '0')

и вы должны проверить, что LENGTH(string) <= 16 или вы можете получить ошибочные результаты.

Ответ 2

UNHEX('hex string')

Будет интерпретировать каждую пару символов в строке, переданной в функцию, как два шестнадцатеричных символа и попытаться преобразовать их в двоичный номер (двоичный формат в mysql). Таким образом, вы можете преобразовать строку в двоичную. Однако это не отображает содержимое как строку двоичных цифр. Скорее, каждый 2 байта в результирующей строке преобразуется в конкретную кодировку символов (например, utf8).