Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения
KANSoftWare

Преобразование ASCII в шестнадцатиричное представление

Delphi , Синтаксис , Преобразования

Преобразование 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.

Статья Преобразование ASCII в шестнадцатиричное представление раздела Синтаксис Преобразования может быть полезна для разработчиков на Delphi и FreePascal.


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


Ваше мнение или вопрос к статье в виде простого текста (Tag <a href=... Disabled). Все комментарии модерируются, модератор оставляет за собой право удалить непонравившейся ему комментарий.

заголовок

e-mail

Ваше имя

Сообщение

Введите код




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



:: Главная :: Преобразования ::


реклама



©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru Rambler's Top100
29.03.2024 16:07:07/0.035299062728882/2