1

私のプログラムは、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_fixPKZip常に同じ順序でファイルに書き込まれることです: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 を使用しています (問題の原因はこれにあると思います)。

4

1 に答える 1