掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
バイナリの検索、書き換えをするには? (ID:13390)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
関数を作ってみました。何回かテストしてバイナリエディタで結果を確認しました。 type TBinaryData = array of byte; function FindReplaceBinaries(const FileName,FindStr,ReplaceStr: string):Boolean; function StrToBinaryData(const Data: string; var bd:TBinaryData):integer; var sl:TStringList; j:integer; begin sl := TStringList.Create; try sl.CommaText := Data; result := sl.Count; SetLength(bd,result); for j := 0 to result-1 do bd[j] := StrToInt('$'+sl[j]); finally sl.Free; end; end; var bd1,bd2:TBinaryData; i,len:integer; ms:TMemoryStream; p:PByte; begin result := false; len := StrToBinaryData(FindStr,bd1); if StrToBinaryData(ReplaceStr,bd2) <> Len then begin ShowMessage('バイナリデータのサイズが一致しません'); exit; end; ms := TMemoryStream.Create; try ms.LoadFromFile(FileName); p := ms.Memory; for i := 0 to ms.Size-len do begin if p^ = bd1[0] then if CompareMem(p,@bd1[0],len) then begin Move(bd2[0],p^,len); ms.SaveToFile(FileName); result := true; Break; end; inc(p); end; finally ms.Free; end; end; procedure TForm1.Button2Click(Sender: TObject); begin if FindReplaceBinaries('c:\BinaryData.dat','12 34 56 AB CD EF', 'EF CD AB 56 34 12') then ShowMessage('成功'); end;
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.