私のプログラムは、7z/ZIP ファイルに保存されているいくつかのファイルで動作します。ただし、一部の 7z/ZIP ファイルはヘッダーが変更されているため、抽出する前に有効なものに変更する必要があります。
変更されたヘッダーは常に同じであるため、const 変数に含まれています (有効なものと共に)。
to_fix := 1629246124;
PKZip := 1347093252;
交換ソリューションは非常に簡単で、正しい方法で実行できたことを願っています。
for i := 0 to filesize(F) do
begin
if i < filesize(F) - 3 then
BlockRead(F, buf, 4);
if buf = to_fix then
begin
Seek(F, i);
BlockWrite(F, PKZip, 4);
end;
buf := 0;
Seek(F, i+1);
end;
私が得る問題は、のすべてのインスタンスをリトルエンディアンまたはビッグエンディアンの順序で置き換えるたびにto_fix
、PKZip
常に同じ順序でファイルに書き込まれることです:04 03 4b 50
の代わりに50 4b 03 04
.
私は次のことを試しました:
const PKZip_B1: array[0..3] of byte = (4,3,75,80);
const PKZip_B2: array[0..3] of byte = (80,75,3,4);
const PKZip_I1 = 67324752; //04 03 4b 50 to decimal
const PKZip_I2 = 1347093252; //50 4b 03 04 to decimal
上記のバリアントはすべて、間違った順序で置き換えられます。
なぜこうなった?私は 64 ビット プロセッサで Delphi 7 を使用しています (問題の原因はこれにあると思います)。