Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Преобразование байтового массива в строку шестнадцатеричных символов в Delphi XE2 и обратно

Delphi , Синтаксис , Массивы

Преобразование байтового массива в строку шестнадцатеричных символов и обратно является обыденной задачей в программировании, особенно при работе с низкоуровневыми операциями. В Delphi есть встроенные функции для выполнения подобных операций, но также возможно написать свои собственные реализации. Ниже представлен пример такой реализации на Object Pascal.

Преобразование байтового массива в строку шестнадцатеричных символов

Для начала рассмотрим функцию, которая преобразует массив байтов в строку шестнадцатеричных символов. В коде используется константа HexSymbols, содержащая символы от 0 до F для представления шестнадцатеричных чисел.

function bintoHex(const bin: array of byte): String;
const
  HexSymbols = '0123456789ABCDEF';
var
  i: integer;
begin
  SetLength(Result, 2 * Length(bin));
  for i := 0 to Length(bin) - 1 do begin
    Result[1 + 2 * i + 0] := HexSymbols[1 + bin[i] shr 4];
    Result[1 + 2 * i + 1] := HexSymbols[1 + bin[i] and $0F];
  end;
end;

Обратное преобразование

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

function xHexToBin(const HexStr: String): TBytes;
var
  i, J: Integer;
  B: Byte;
begin
  SetLength(Result, (Length(HexStr) + 1) shr 1);
  B:= 0;
  i := 0;
  while I < Length(HexStr) do begin
    J:= 0;
    while J < Length(HexSymbols) do begin
      if HexStr[I + 1] = HexSymbols[J + 1] then Break;
      Inc(J);
    end;
    if J = Length(HexSymbols) then // ошибка, если символ не является шестнадцатеричным
      raise Exception.Create('Недопустимый символ в строке шестнадцатеричных чисел');
    if Odd(I) then
      Result[I shr 1]:= B shl 4 + J
    else
      B:= J;
    Inc(I);
  end;
  if Odd(I) then Result[I shr 1]:= B;
end;

Использование встроенных функций RTL

Для упрощения задачи можно использовать встроенные функции BinToHex и HexToBin, предоставляемые RTL. Пример использования этих функций:

{$APPTYPE CONSOLE}

uses
  System.Classes,
  System.SysUtils;

var
  LArray : array[1..6] of Byte = (10, 11, 12, 13, 14, 15);
  LText: string;
  I : integer;
begin
  try
    SetLength(LText, Length(LArray)*2);
    BinToHex(@LArray[1], PChar(LText), SizeOf(LArray));
    // Вывод строки в шестнадцатеричном формате
    Writeln(LText);

    // Заполнение массива нулями
    FillChar(LArray, SizeOf(LArray), #0);

    // Чтение значений из строки в шестнадцатеричном формате обратно в массив
    HexToBin(PChar(LText), @LArray, Length(LArray) div 2);

    // Вывод значений массива
    for I := Low(LArray) to High(LArray) do
      Write(LArray[I]);
    Readln;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.

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

Создано по материалам из источника по ссылке.

Преобразование байтового массива в строку шестнадцатеричных символов и обратно является важной задачей в программировании, особенно при работе с низкоуровневыми операциями, и в языке Delphi существуют встроенные функции для выполнения таких операций, а т


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




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


:: Главная :: Массивы ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-03-14 10:57:28/0.0052859783172607/1