Danke für die Erklärung! Beim ersten f2.Write ist hinten das +1 zuviel glaube ich. Ich habs weggenommen denn sonst wird ein NULL-Zeichen mit verarbeitet das es nicht gibt.
Delphi-Quellcode:
aByteStream := TBytesStream.Create;
try
aByteStream.LoadFromFile(aFileName);
iPosRawByte := Pos(RawByteString(a), RawByteString(aByteStream.Bytes));
if iPosRawByte > 0 then
begin
aByteStream2 := TBytesStream.Create;
try
aByteStream2.Write(aByteStream.Bytes[0], iPosRawByte - 1);
aByteStream2.Write(aByteStream.Bytes[iPosRawByte + Length(a)], aByteStream.Size - (iPosRawByte + Length(a)));
aByteStream2.SaveToFile('_STREAM.txt'); // zum test um mir zu zeigen, was in aBytesStream2 vorhanden ist
hashRaw := TByteToHex(System.hash.THashMD5.GetHashBytes(aByteStream2));
ShowMessage(string(hashRaw) + #10 + string(a) + #10 + (hashRaw = a).ToInteger.ToString);
finally
aByteStream2.Free;
end;
end;
finally
aByteStream.Free;
end;
Irgendwo scheint es aber noch ein Problem zu geben. hashRaw ist bei mir
D41D8CD98F00B204E9800998ECF8427E, es sollte aber
2708D4849D8E94F1FB0F8145999B632A sein.
Ob da irgendwo was mit der Umwandlung von Byte to Hex schiefgeht?
Edit
mit folgender Zeile klappt es und der Hash ist korrekt. Nur ob das eine schöne Lösung ist?
hashRaw := System.hash.THashMD5.GetHashString(Trim(TEncoding.ANSI.GetString(aByteStream2.Bytes)));
Nur das erneute Auslesen des Hashes funktioniert nicht. Denn wenn ich den RawByteString ersetze, kann ich ja später nicht mehr nach ihm suchen.