![]() |
Delphi-Version: XE2
Probleme mit PChar
Hallo,
ich habe vor Jahren in D6 oder D2007 folgende Function erstellt.
Delphi-Quellcode:
Nun habe ich versucht Pchar durch PWideChar oder PAnsiChar zu ersetzen. Leider bringt mir die Function eine völlig anderes Ergebnis als unter D2007.
function Base16ToStr(Value: PChar; Len: Integer): String;
var D: PByte; V: Byte; S: PChar; begin Result := ''; if Value = nil then Exit; if Len < 0 then Len := StrLen(Value); SetLength(Result, (Len +1) div 2); D := PByte(Result); S := PChar(Value); while Len > 0 do begin V := Byte(UpCase(S^)); Inc(S); if V > Byte('9') then D^ := V - Byte('A') + 10 else D^ := V - Byte('0'); V := Byte(UpCase(S^)); Inc(S); D^ := D^ shl 4; if V > Byte('9') then D^ := D^ or (V - Byte('A') + 10) else D^ := D^ or (V - Byte('0')); Dec(Len, 2); Inc(D); end; SetLength(Result, PChar(D) - PChar(Result)); end; Was muß ich verändern um wieder das Ergebnis wie unter D2007 zu erreichen? Hat jemand einen Tipp. Vielen Dank im voraus. |
AW: Probleme mit PChar
Was soll die Methode eigentlich grundsätzlich tun?
Sherlock |
AW: Probleme mit PChar
Alle "PChar" durch "PAnsiChar" und alle "String" durch AnsiString" ersetzen:
Delphi-Quellcode:
Edit: Das geht natürlich auch übersichtlicher.
function Base16ToStr(Value: PAnsiChar; Len: Integer): AnsiString;
var D: PByte; V: Byte; S: PAnsiChar; begin {...usw.}
Delphi-Quellcode:
function HexValue(AValue: AnsiChar): Byte;
begin case AValue of '0'..'9': Result := Ord(AValue) - Ord('0'); 'A'..'F': Result := Ord(AValue) - Ord('A') + 10; 'a'..'f': Result := Ord(AValue) - Ord('a') + 10; else raise Exception.Create('ungültiges Zeichen'); end; end; function Base16ToStr(Value: PAnsiChar; Len: Integer): AnsiString; var v: Byte; i: Integer; begin Result := ''; if Value = nil then Exit; if Len < 0 then Len := StrLen(Value); if Odd(Len) then raise Exception.Create('ungerade Anzahl für halbe Byte'); SetLength(Result, Len div 2); for i := 1 to Length(Result) do begin v := HexValue(Value^) shl 4; Inc(Value); v := v or HexValue(Value^); Inc(Value); Result[i] := AnsiChar(v); end; end; |
AW: Probleme mit PChar
Falsch gelesen ... [entfernt]
|
AW: Probleme mit PChar
Danke Blup, der Tipp war gut. Musste nur noch String durch AnsiString ersetzen und schon funktionierte es. PChar hatte ich vorher schon in PAnsiChar ersetzt.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:37 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz