本帖最后由 qq724174 于 2011-11-11 05:07 编辑
回复 6# pusofalse $sss = _tihuan("test1.exe", "abcd1234", "abcd5780.", "asc")
MsgBox(0, "替换成功次数", $sss)
Func _tihuan($file, $a, $b, $num = 0)
$files = FileOpen($file, 16)
$fileshex = FileRead($files)
FileClose($files)
$isin = StringInStr($fileshex, _txt2hex($a))
If $isin = 0 Then
Return 0 ;$a不存在
Else
$ddds = StringReplace($fileshex, _txt2hex($a), _txt2hex($b), $num)
If @extended > 0 Then
$re = @extended
$files = FileOpen($file, 18)
If FileWrite($files, $ddds) = 0 Then Return -1
Return $re
Else
Return -2
EndIf
EndIf
EndFunc ;==>_tihuan
Func _txt2hex($sString) ;thanks 丨悠闲丨
Dim $BinaryString
For $i = 1 To StringLen($sString)
$STR = StringMid($sString, $i, 1)
If String(Binary($STR)) > 0xFF Then Return Binary($sString)
If String(Binary($STR)) < 0x80 Then
$BinaryString &= String(Binary($STR))
Else
$BinaryString &= String(Binary($STR & $STR))
EndIf
Next
$BinaryString = StringReplace($BinaryString, '0x', '')
Return $BinaryString
EndFunc ;==>_txt2hex
找遍论坛所有关于hex的例子,以上代码可以成功替换
但是郁闷的事"abcd1234"要是固定的值,不知道怎么在这里面使用正则找出abcd后面的2-6位纯数字。$iId = StringRegExp($test, '(?i)abcd(\d+)', 1)
这样在 $test是普通文本的时候可以正则提取到1234但是hex的话 实在无解了,老大指点一下。 |