Я разработал следующую функцию для преобразования строк для преобразовывания значений в шестнадцатеричную систему.
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;
Теперь я задавался вопросом, существует ли более эффективный способ преобразовать строки?
В зависимости от вашей версии 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;
Это кажется достаточно хорошим, вы всегда могли бы иметь таблицу поиска байт->2 шестнадцатеричные цифры, но это (и подобные оптимизации) кажется мне излишеством в большинстве случаев.
Попробуйте этот
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;
// StrToInt ('$' + MyString); Упс, не очень хорошо прочитал вопрос ...