Ich möchte in einer Binärdatei nach einem bestimmten vorkommen suchen und dann den 8byte Wert nach diesem Vorkommen auslesen und verarbeiten.
Das Suchen nach dem Vorkommen ist kein Problem, es wird gefunden und ich lese die 8 folgenden bytes aus und speichere sie in einer listbox. Dann sucht das Programm weiter.
Nun habe ich aber die Ergebnisse in der Listbox mit einem Hexeditor überprüft und festgestellt das die werte mal stimmen und mal nicht. Also die ersten 5 Werte stimmen, dann 2 wieder nicht usw... Die Werte unterscheiden sich meist nur an einer Stelle.
Ich habe den Eindruck als würden bestimmte Zeichen aus der Datei falsch interpretiert.
Aus dem Wert
3B 70 CE 88 D2 3E 21 40
wird
3B 70 CE 2C 6D 23 E2 21 40
Aus dem Wert
74 46 94 F6 06 3F 21 40
wird
74 46 20 1D F6 06 3F 21 40
Das Verstehe ich nicht. Weiß jemand von euch woran das liegen könnte? Wie kann ich den Code noch optimieren?
Delphi-Quellcode:
function Tform3.searching(fname: string) : integer;
var
MS:TmemoryStream;
p1:Cardinal;
Search : AnsiString;
index : Integer;
anzahl : Integer;
lon,lat : String;
Tempstr : String;
i : Byte;
begin
MS := TMemoryStream.Create;
try
lon := '';
lat:= '';
MS.LoadFromFile(fname);
SetString(Search,PansiChar(MS.Memory),MS.Size);
p1 := 0;
anzahl := 0;
p1 := Pos(AnsiString('tude'), Search);
if p1 <> 0 then begin
inc(anzahl);
tempstr := copy(search,p1+6,8);
for i := 1 to 8 do
lon := lon + IntToHex(Ord(tempstr[i]), 2);
listbox1.Items.Add(lon);
end;
index := p1+4;
while p1 <> 0 do begin
lon := '';
lat:= '';
p1 := PosEx(AnsiString('longitude'), Search, index);
if p1 <> 0 then begin
inc(anzahl);
tempstr := copy(search,p1+6,8);
for i := 1 to 8 do
lon := lon + IntToHex(Ord(tempstr[i]), 2);
listbox1.Items.Add(lon);
end;
index := p1+4;
end;
finally
MS.Free;
end;
result := anzahl;
end;
Vielen Dank!!