Под сторокой с HEX-кодами подразумеваю 7B2EB3749AA32C093A6493EE96985D96
function StrToHex(Const Source: String): String;
var
c:Char;
begin
Result := '';
for c in Source do
Result := Result + IntToHex(Integer(c), 2);
end;
function HexToStr(HexStr : String; const Text : boolean = True) : string;
var
Hex : byte;
sTemp : string;
i : integer;
begin
Result := '';
if Length(HexStr) mod 2 <> 0 then
Exit;//('Неправельная длина строки');
for i := 2 to Length(HexStr) do
if i mod 2 = 0 then begin
sTemp := '$' + Copy(HexStr, i - 1, 2);
Hex := Byte(StrToInt(sTemp));
if Hex = $00 then begin
if Text then
Result := Result + ' '
else
Result := Result + #$00;
Continue;
end;
Result := Result + chr(Hex);
end;
end;
Переведенный текст на русский язык:
Код Delphi состоит из двух функций: StrToHex и HexToStr. Первая функция, StrToHex, принимает строку в качестве входного параметра и возвращает ее hexadecimal-представление. Вторая функция, HexToStr, принимает hexadecimal-сокращение в качестве входного параметра и возвращает исходную строку.
Функция StrToHex
Эта функция проходит по каждому символу в входной строке и конвертирует его в соответствующее hexadecimal-значение с помощью функции IntToHex. Полученные hexadecimal-значения конкатенируются в одну строку, которая затем возвращается как результат.
Вот шаг за шагом, как работает эта функция:
Инициализируйте пустую строку результата.
Проходите по каждому символу c в входной строке Source.
Конвертируйте символ в его целочисленное значение с помощью функции Integer.
Используйте функцию IntToHex, чтобы конвертировать целочисленное значение в его hexadecimal-представление как строку.
Конкатенируйте полученную hexadecimal-строку к концу строки результата.
Возвращает финальную строку результата.
Функция HexToStr
Эта функция принимает hexadecimal-сокращение в качестве входного параметра и возвращает исходную строку. Вот шаг за шагом, как работает эта функция:
Инициализируйте пустую строку результата.
Проверьте, является ли длина входной hex-строки нечетной. Если да, верните сразу (в этом случае код не предоставляет сообщение об ошибке).
Проходите по каждой паре символов в входной hex-строке (начиная с индекса 2 до конца).
Извлекайте двухсимвольное hexadecimal-значение из входной строки.
Конвертируйте это hexadecimal-значение в соответствующее байтовое значение с помощью функций Byte и StrToInt.
Проверьте, является ли полученное байтовое значение равным $00. Если да, добавьте символ пробела или null-символ (#$00) к строке результата в зависимости от параметра Text (который по умолчанию имеет значение True).
В противном случае конвертируйте байтовое значение в соответствующий ASCII-символ с помощью функции Chr и добавьте его к строке результата.
Верните финальную строку результата.
Замечания
Функция HexToStr предполагает, что входное hexadecimal-сокращение является корректным и не содержит никаких недопустимых символов.
Если входная hex-строка содержит null-символы (#$00), они будут сохранены в строке результата, если Text имеет значение True.
Код не обрабатывает ошибки или исключения, поэтому необходимо убедиться, что входные строки являются корректными и правильно форматированными.
Альтернативное решение
Если вы ищете более эффективный способ выполнить эти конверсии, можно рассмотреть использование встроенных функций Delphi, таких как:
EncodeString (для кодирования строки в ее hexadecimal-представление)
DecodeHexByteString (для декодирования hexadecimal-сокращения обратно в его исходное байтовое значение)
Эти функции могут упростить процесс конверсии и уменьшить риск ошибок.
Например, можно переписать функцию StrToHex следующим образом:
Преобразование строк с HEX-кодами к строкам символов и обратно обеспечивается использованием функций StrToHex и HexToStr, которые конвертируют вводную строку в формат 16-ричных кодов и обратно.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.