Недавно добавленные исходники

•  DeLiKaTeS Tetris (Тетрис)  164

•  TDictionary Custom Sort  3 338

•  Fast Watermark Sources  3 092

•  3D Designer  4 849

•  Sik Screen Capture  3 345

•  Patch Maker  3 554

•  Айболит (remote control)  3 660

•  ListBox Drag & Drop  3 015

•  Доска для игры Реверси  81 707

•  Графические эффекты  3 946

•  Рисование по маске  3 249

•  Перетаскивание изображений  2 630

•  Canvas Drawing  2 753

•  Рисование Луны  2 582

•  Поворот изображения  2 190

•  Рисование стержней  2 168

•  Paint on Shape  1 568

•  Генератор кроссвордов  2 236

•  Головоломка Paletto  1 767

•  Теорема Монжа об окружностях  2 231

•  Пазл Numbrix  1 685

•  Заборы и коммивояжеры  2 057

•  Игра HIP  1 282

•  Игра Go (Го)  1 230

•  Симулятор лифта  1 475

•  Программа укладки плитки  1 216

•  Генератор лабиринта  1 548

•  Проверка числового ввода  1 366

•  HEX View  1 497

•  Физический маятник  1 358

 
скрыть


Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Delphi Sources

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





Похожие по теме исходники

AsciiMaker




Copyright © 2004-2024 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

Группа ВКонтакте