Also hexstr brauchst du nicht erst, denn in Delphi kannst du auch gleich mit Result arbeiten. ^^
Außerdem hätte der Copiler bei dir auch schon wegen dem
result := ''; meckern sollen
Dann [i]IntToHex(Word(SourceStr
), 2);, da sollte doch wohl 'ne 4 rein, denn ein WideChar hat 2 Bytes und demnach 4 HexChars
Delphi-Quellcode:
function WStrToHex(SourceStr: WideString): WideString;
const
HexTable: Array of Char = '0123456789ABCDEF';
var
hexstr: string;
i : integer;
begin
result := '';
for i := 1 to Length(SourceStr) do
Result := Result + IntToHex(Word(SourceStr[i]), 4);
end;
Und schneller geht es, wenn du den String nicht jedesmal in seiner Länge veränderst, sondern die Stringlänge am Anfang einmal festlegst und dann nur noch die einzelnen Chars veränderst.
z.B. (noch schneller geht es über 'nen PChar)
Delphi-Quellcode:
function WStrToHex(SourceStr: WideString): WideString;
const
HexTable: Array of Char = '0123456789ABCDEF';
var
i : integer;
begin
SetLength(result, Length(SourceStr) * 4);
for i := 0 to Length(SourceStr) - 1 do
begin
hexstr[i * 4 + 1] := HexTable[Word(SourceStr[i]) and $0F];
hexstr[i * 4 + 2] := HexTable[(Word(SourceStr[i]) shr 8) and $0F];
hexstr[i * 4 + 3] := HexTable[(Word(SourceStr[i]) shr 16) and $0F];
hexstr[i * 4 + 4] := HexTable[(Word(SourceStr[i]) shr 24)];
end;
end;