我的数据直接是 12 13 14 15 16 17 18 1A 2E 等16进制数据
现在知道一个文件需要写入的偏移地址是$10010010
知道字符串的话可以直接写入
要是想直接把我的十六进制数据写入那个偏移替换他的16进制文件如何实现?
现在的想法是
把16进制数据转换成ascii数据
然后按常规方法写入偏移
请问有什么好的方法吗?

解决方案 »

  1.   

    计算机能认的都是二进制,没必要把16进制数据转换成ascii数据
    就看你那偏移地址中你想写入的是字符数据还是整型数据,比如你要写入16进制数据:2E,如果是写入字符数据,那就是'2E',如果是整型,那就是$2E
      

  2.   

    procedure WriteToMainFile(FileUrl: String; Pos: Dword; MainFile: String);
    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表示可写的长度
      

  3.   

    比如偏移地址10101010开始的数据 313233343536 对应的ascii是123456
    而我的数据是 363534333231 ,想替换掉的数据是偏移10101010开始的313233343536
    如何实现
      

  4.   

    直接用我给的函数不就行了
    var
    s:string;
    begin
    s:='654321;'
    WriteToMainFile(s, @10101010, filename);
    end;
      

  5.   

    我知道啊
    但是你没看懂我的意思
    我的数据是ascii的16进制格式
    我看不懂654321这样的ascii编码
    只有363534333231这样的16进制格式
    我想这个的16进制数据不用通过转换成ascii如何写入到偏移
      

  6.   

    WriteToMainFile(chr(36)+chr(35)+chr(34)+chr(33)+chr(32)+chr(31), 10101010, filename);