Четверг, 19.06.2025, 02:06
Приветствую Вас Гость | RSS
Меню сайта
fff
  • Индексация
  • Девочки
    Форма входа
    Категории раздела
    Теория алгоритмов [3]
    Теория алгоритмов
    Code Snippets [1]
    Code Snippets
    Все о PHP [20]
    Все о PHP
    Visual C++ [13]
    Visual C++
    WIN32 API [7]
    WIN32 API
    Delphi [72]
    Delphi
    ASP [2]
    ASP
    Java [67]
    Java
    VBScript [6]
    VBScript
    CGI [2]
    CGI
    VRML [2]
    VRML
    PERL [9]
    PERL
    HTML [4]
    HTML
    XML [10]
    XML
    Архив записей

    Статьи по Оптимизации

    ПРОГРАММИРОВАНИЕ! СОЗДАНИЕ САЙТОВ И ИХ ОПТИМИЗАЦИЯ

    Главная » Статьи » Программирование » Delphi

    Преобразование ASCII в шестнадцатиричное представление
    Преобразование 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©;
    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 | Добавил: Merlin (07.12.2009)
    Просмотров: 435 | Комментарии: 1 | Рейтинг: 0.0/0
    Всего комментариев: 0
    Имя *:
    Email *:
    Код *: