Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Widestring nach Hex konvertieren (https://www.delphipraxis.net/58916-widestring-nach-hex-konvertieren.html)

bioser 14. Dez 2005 15:25


Widestring nach Hex konvertieren
 
Hallo, gibt es solche fertigen functions, die Widestrings in Hexwerte umwandeln bzw. von Hex nach Widestring konvertieren können. Für Links wäre ich dankbar. Oder klappt das auch mit StrToHex bzw. HexToStr ?

bioser 14. Dez 2005 17:49

Re: Widestring nach Hex konvertieren
 
Hallo, ich beantworte meine Frage mal selbst:

Das geht so:

Delphi-Quellcode:
function WStrToHex(SourceStr: WideString): WideString;
var
  hexstr: string;
  i : integer;
begin
  result := '';
  hexstr := '';
  for i := 1 to Length(SourceStr) do
    hexstr := hexstr + IntToHex(Word(SourceStr[i]), 2);
    Result := hexstr;
end;

himitsu 16. Dez 2005 07:34

Re: Widestring nach Hex konvertieren
 
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 :zwinker:
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;


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:33 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz