【发布时间】:2015-07-02 03:03:12
【问题描述】:
我的程序可以处理一些存储在 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 而不是 @987654326 @。
我尝试了以下方法:
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(我敢打赌问题是由于这个)。
【问题讨论】:
标签: delphi header endianness lzma