我的数据直接是 12 13 14 15 16 17 18 1A 2E 等16进制数据
现在知道一个文件需要写入的偏移地址是$10010010
知道字符串的话可以直接写入
要是想直接把我的十六进制数据写入那个偏移替换他的16进制文件如何实现?
现在的想法是
把16进制数据转换成ascii数据
然后按常规方法写入偏移
请问有什么好的方法吗?
现在知道一个文件需要写入的偏移地址是$10010010
知道字符串的话可以直接写入
要是想直接把我的十六进制数据写入那个偏移替换他的16进制文件如何实现?
现在的想法是
把16进制数据转换成ascii数据
然后按常规方法写入偏移
请问有什么好的方法吗?
就看你那偏移地址中你想写入的是字符数据还是整型数据,比如你要写入16进制数据:2E,如果是写入字符数据,那就是'2E',如果是整型,那就是$2E
var
MainFileHandle: THandle;
BytesWritten: Dword;
i: Integer;
begin
//写文件
MainFileHandle := CreateFile(pChar(MainFile), GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
SetFilePointer(MainFileHandle, Pos, nil, FILE_BEGIN);
for i := 0 to (64 - Length(FileUrl)) - 1 do
begin
FileUrl := FileUrl + #0;
end;
WriteFile(MainFileHandle, pChar(FileUrl)^, 64, BytesWritten, nil);
CloseHandle(MainFileHandle);
end;
我经常用这个函数写配置信息,我写的是String,改成写16进制也我想也不难。
代码中的64表示可写的长度
而我的数据是 363534333231 ,想替换掉的数据是偏移10101010开始的313233343536
如何实现
var
s:string;
begin
s:='654321;'
WriteToMainFile(s, @10101010, filename);
end;
但是你没看懂我的意思
我的数据是ascii的16进制格式
我看不懂654321这样的ascii编码
只有363534333231这样的16进制格式
我想这个的16进制数据不用通过转换成ascii如何写入到偏移