Преобразование Строк для Преобразовывания в шестнадцатеричную систему производительным способом

Я разработал следующую функцию для преобразования строк для преобразовывания значений в шестнадцатеричную систему.

function StrToHex(const S: String): String;
const
  HexDigits: array[0..15] of Char = '0123456789ABCDEF';
var
  I: Integer;
  P1: PChar;
  P2: PChar;
  B: Byte;
begin

  SetLength(Result, Length(S) * 2);
  P1 := @S[1];
  P2 := @Result[1];

  for I := 1 to Length(S) do
  begin
    B := Byte(P1^);
    P2^ := HexDigits[B shr 4];
    Inc(P2);
    P2^ := HexDigits[B and $F];
    Inc(P1);
    Inc(P2);
  end; 

end; 

Теперь я задавался вопросом, существует ли более эффективный способ преобразовать строки?

6
задан oopbase 22 July 2010 в 10:54
поделиться

4 ответа

В зависимости от вашей версии Delphi:

D5-D2007

uses classes;
function String2Hex(const Buffer: Ansistring): string;
begin
  SetLength(result, 2*Length(Buffer));
  BinToHex(@Buffer[1], @result[1], Length(Buffer));
end;

D2009 +

uses classes;
function String2Hex(const Buffer: Ansistring): string;
begin
  SetLength(result, 2*Length(Buffer));
  BinToHex(@Buffer[1], PWideChar(@result[1]), Length(Buffer));
end;
10
ответ дан 8 December 2019 в 13:43
поделиться

Это кажется достаточно хорошим, вы всегда могли бы иметь таблицу поиска байт->2 шестнадцатеричные цифры, но это (и подобные оптимизации) кажется мне излишеством в большинстве случаев.

1
ответ дан 8 December 2019 в 13:43
поделиться

Попробуйте этот

   function String2Hex(const Buffer: Ansistring): string;
   var
     n: Integer;
   begin
     Result := '';
     for n := 1 to Length(Buffer) do
       Result := LowerCase(Result + IntToHex(Ord(Buffer[n]), 2));
   end;
3
ответ дан 8 December 2019 в 13:43
поделиться

// StrToInt ('$' + MyString); Упс, не очень хорошо прочитал вопрос ...

0
ответ дан 8 December 2019 в 13:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: