将文件内容加载为十六进制我在Delphi 7中使用此代码:
procedure ReadFileAsHex(const AFileName: string; ADestination: TStrings);
var fs: TFileStream;
buff: Byte;
linecount: Byte;
line: string;
begin
linecount := 0;
line := '';
fs := TFileStream.Create(AFileName, fmOpenRead);
try
while fs.Position < fs.Size do begin
fs.Read(buff, 1);
line := line + IntToHex(buff, 2) + ' ';
Inc(linecount);
if linecount = 16 then begin
ADestination.Add(line);
line := '';
linecount := 0;
end;
end;
if Length(line) <> 0 then
ADestination.Add(line);
finally
fs.Free;
end;
end;
这显示我在Hex中的加载文件:
34 01 00 00 13 00 00 00 13 00 00 00 04 00 00 00
01 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00
34 01 00 00 13 00 00 00 13 00 00 00 04 00 00 00
01 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00
我想从实际文件
替换部分数据例如 我想将数据从偏移(00000060)替换为偏移(00000070),例如00 all 是否可能或者我需要一些特殊的组件呢?
由于
答案 0 :(得分:4)
没有&#34;写十六进制&#34;。十六进制只是一种表示数字并更容易执行某些数学运算的方法。十六进制值$00
与十进制0
完全相同,如果以数字形式写入文件,则它们完全相同。如果你写$FF
和十进制255
,情况也是如此。它们以相同的值结束在文件中,以相同的方式编写。
换句话说,将以下任一变量写入文件将产生完全相同的文件内容:
const
DecimalZero = 0;
HexZero = $0;
对于这些也可以这样说:
const
DecimalTwoFiftyFive = 255;
HexTwoFiftyFive = $FF;
您可以告诉您实际读取数字(非文本)值,因为您发布的代码必须在值上使用IntToHex
才能将其转换为十六进制字符串在它可以将其添加到line
变量之前,该变量被声明为string
。
您正在讨论将二进制(非文本)写入文件,这只是意味着将实际数值写入文件而不是这些数字的文本表示。
您只需将TFileStream
定位到您要开始编写的位置,然后将所需的字节数写入文件。您必须以写入模式打开流,而不是像代码使用fmOpenRead
那样只读取。
var
fs: TFileStream;
Buff: array of byte;
begin
// Set length of buffer and initialize buffer to zeros
SetLength(Buff, 10);
FillChar(Buff[0], Length(Buff), #0);
fs := TFileStream.Create(AFileName, fmOpenWrite);
try
fs.Position := 60; // Set to starting point of write
fs.Write(Buff[0], Length(Buff)); // Write bytes to file
finally
fs.Free;
end;
end;