Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi String wird nur Teilweise ausgelesen (https://www.delphipraxis.net/107143-string-wird-nur-teilweise-ausgelesen.html)

Gehstock 23. Jan 2008 01:03


String wird nur Teilweise ausgelesen
 
Delphi-Quellcode:
Function Getx30Platform (Name : String):TBC;
var
Buf30:Array[0..30]of Char;
Imei : String;
FS :TFileStream;
i : Integer;
begin
  FS := TFileStream.Create(Name,fmopenreadwrite);
  FS.Position := $2fe82;
    FS.ReadBuffer(Buf30,30);
    Imei := StrToHex(Buf30);
FS.Free;
end; //funze
Soll einen 15 Stelligen String ausgeben die in der datei so aussieht
Zitat:

S76.C.........
auslesen tut es aber nur
Zitat:

S76

Medium 23. Jan 2008 01:49

Re: String word nur Teilweise ausgelesen
 
3 Möglichkeiten:

1) Die Datei ist nach '6' zu ende.
2) Das Zeichen '.' nach '6' wird nur im Hex-Editor als '.' angezeigt, und ist eigentlich ein #0. Damit wird der String terminiert.
3) Was auch immer StrToHex macht, es macht es falsch. Da mein Delphi die Funktion nicht kennt, lässt sich schwer etwas in diese Blackbox hineinraten.

Darüber hinaus liest du 30 Zeichen aus, sprichst aber nachher von 15. Ich vermute, dass StrToHex diese Hexerei vollbringen soll. Zudem wird nicht klar, ob dein zu kurzer String nachher in Buf30 oder Imei steht.

Gehstock 23. Jan 2008 01:54

Re: String wird nur Teilweise ausgelesen
 
Möglichkeit 2 sollte es sein

StrtoHex macht das
Delphi-Quellcode:
function StrToHex(AStr: String): String;
var i: Integer;
begin
 result := '';
 for i:=1 to StrLen(Pchar(AStr)) do begin
  Result := Result+' '+IntToHex(Ord(AStr[i]),2);
 end;
end;
Tut aber nix zur sache weil es wie gesagt auf die stringterminierung hinausläuft nur wie umgehe ich die

Dax 23. Jan 2008 01:59

Re: String wird nur Teilweise ausgelesen
 
Delphi-Quellcode:
function MoreStrToHex(s: string): string;
var i: integer;
begin
  result := '';
  for i := 1 to length(s) do
    result := result + inttohex(chr(s[i]), 2);
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:55 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 by Thomas Breitkreuz