Delphi World - Преобразование ASCII в шестнадцатиричное представление
Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Преобразование ASCII в шестнадцатиричное представление

Строка представляет собой массив байтов в виде ASCII-символов. Необходимо организовать преобразование типов по аналогии с Delphi-функциями Ord и Chr.

Функция BytesToHexStr преобразует, к примеру, набор байтов [0,1,1,0] в строку '30313130', HexStrToBytes выполнит обратное преобразование.


unit Hexstr;

interface
uses String16, SysUtils;

type

  PByte = ^BYTE;

procedure BytesToHexStr(var hHexStr: string; pbyteArray: PByte; InputLength:
  WORD);

procedure HexStrToBytes(hHexStr: string; pbyteArray: Pointer);
procedure HexBytesToChar(var Response: string; hexbytes: PChar; InputLength:
  WORD);

implementation

procedure BytesToHexStr(var hHexStr: string; pbyteArray: PByte; InputLength:
  WORD);
const

  HexChars: array[0..15] of Char = '0123456789ABCDEF';
var

  i, j: WORD;
begin

  SetLength(hHexStr, (InputLength * 2));
  FillChar(hHexStr, sizeof(hHexStr), #0);
  j := 1;
  for i := 1 to InputLength do
  begin
    hHexStr[j] := Char(HexChars[pbyteArray^ shr 4]);
    inc(j);
    hHexStr[j] := Char(HexChars[pbyteArray^ and 15]);
    inc(j);
    inc(pbyteArray);
  end;
end;

procedure HexBytesToChar(var Response: string; hexbytes: PChar; InputLength:
  WORD);
var

  i: WORD;
  c: byte;
begin

  SetLength(Response, InputLength);
  FillChar(Response, SizeOf(Response), #0);
  for i := 0 to (InputLength - 1) do
  begin
    c := BYTE(hexbytes[i]) and BYTE($F);
    if c > 9 then
      Inc(c, $37)
    else
      Inc(c, $30);
    Response[i + 1] := char(c);
  end; {for}
end;

procedure HexStrToBytes(hHexStr: string; pbyteArray: Pointer);
{pbyteArray указывает на область памяти, хранящей результаты}
var

  i, j: WORD;
  tempPtr: PChar;
  twoDigits: string[2];
begin

  tempPtr := pbyteArray;
  j := 1;
  for i := 1 to (Length(hHexStr) div 2) do
  begin
    twoDigits := Copy(hHexStr, j, 2);
    Inc(j, 2);
    PByte(tempPtr)^ := StrToInt('$' + twoDigits);
    Inc(tempPtr);
  end; {for}
end;

end.



unit String16.
interface
{$IFNDEF Win32}

procedure SetLength(var S: string; Len: Integer);
procedure SetString(var Dst: string; Src: PChar; Len: Integer);
{$ENDIF}
implementation
{$IFNDEF Win32}

procedure SetLength(var S: string; Len: Integer);
begin
  if Len > 255 then
    S[0] := Chr(255)
  else
    S[0] := Chr(Len)
end;

procedure SetString(var Dst: string; Src: PChar; Len: Integer);
begin
  if Len > 255 then
    Move(Src^, Dst[1], 255)
  else
    Move(Src^, Dst[1], Len);
  SetLength(Dst, Len);
end;
{$ENDIF}
end.

Проект Delphi World © Выпуск 2002 - 2017
Автор проекта: Эксклюзивные курсы программирования