AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme mit PChar

Ein Thema von Walter Landwehr · begonnen am 29. Apr 2014 · letzter Beitrag vom 29. Apr 2014
Antwort Antwort
Walter Landwehr

Registriert seit: 28. Mär 2006
Ort: 32816 Schieder-Schwalenberg
397 Beiträge
 
Delphi 10.4 Sydney
 
#1

Probleme mit PChar

  Alt 29. Apr 2014, 10:47
Delphi-Version: XE2
Hallo,

ich habe vor Jahren in D6 oder D2007 folgende Function erstellt.

Delphi-Quellcode:
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;
Nun habe ich versucht Pchar durch PWideChar oder PAnsiChar zu ersetzen. Leider bringt mir die Function eine völlig anderes Ergebnis als unter D2007.

Was muß ich verändern um wieder das Ergebnis wie unter D2007 zu erreichen?

Hat jemand einen Tipp.

Vielen Dank im voraus.
Walter Landwehr
Mfg

Walter
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.800 Beiträge
 
Delphi 12 Athens
 
#2

AW: Probleme mit PChar

  Alt 29. Apr 2014, 10:52
Was soll die Methode eigentlich grundsätzlich tun?

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.477 Beiträge
 
Delphi 12 Athens
 
#3

AW: Probleme mit PChar

  Alt 29. Apr 2014, 11:00
Alle "PChar" durch "PAnsiChar" und alle "String" durch AnsiString" ersetzen:
Delphi-Quellcode:
function Base16ToStr(Value: PAnsiChar; Len: Integer): AnsiString;
var
   D: PByte;
   V: Byte;
   S: PAnsiChar;
begin
{...usw.}
Edit: Das geht natürlich auch übersichtlicher.
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;

Geändert von Blup (29. Apr 2014 um 11:28 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Probleme mit PChar

  Alt 29. Apr 2014, 11:24
Falsch gelesen ... [entfernt]
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
Walter Landwehr

Registriert seit: 28. Mär 2006
Ort: 32816 Schieder-Schwalenberg
397 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Probleme mit PChar

  Alt 29. Apr 2014, 12:40
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.
Walter Landwehr
Mfg

Walter
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:09 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