标题:如何实现以16进制方式打开指定的文件并查找替换16进制数值?
只看楼主
yuma
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:银河系
等 级:贵宾
威 望:33
帖 子:1883
专家分:2904
注 册:2009-12-22
得分:0 
如果你手边没有VB6软件,或者觉得VB6编译、修改比较麻烦

你也可以用VBS,右击可直接编辑。双击可直接运行完成修改。

代码差不多。

附上:
fas修改.zip (999 Bytes)


[此贴子已经被作者于2021-2-10 18:36编辑过]


心生万象,万象皆程序!
本人计算机知识网:http://bbs.为防伸手党,本站已停止会员注册。
2021-02-10 16:49
yuma
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:银河系
等 级:贵宾
威 望:33
帖 子:1883
专家分:2904
注 册:2009-12-22
得分:0 
以下是引用dx002386在2021-2-10 16:41:11的发言:

比如
0F XX 00 57 67 替换为  57 YY 00 00 00
XX 是任意的16进制数值, YY=XX-2  (也是16进制的)

XX 的数值是不确定的。。


不确定你让程序如何修改。或者这种替换存在什么规律?







为了缩短楼层在这里编辑一下。

文件的十六进制代码是怎么计算的?

第一步:数字、汉字、字符 得到它们的ASCII值。

第二步: ASCII值的十六进制数,就是你要替换的十六进制数(也是WinHex软件看到的十六进制数)

这里不再举例。

像你这种YY=XX-2 (也是16进制的),如果XX是汉字的16进制数,你-2等于 HEX(ASCII-2),换了一个汉字。

[此贴子已经被作者于2021-2-10 17:14编辑过]


心生万象,万象皆程序!
本人计算机知识网:http://bbs.为防伸手党,本站已停止会员注册。
2021-02-10 16:52
dx002386
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2021-2-9
得分:0 
回复 12楼 yuma
多谢大师指点。。。。。。我研究下看看  有疑问再请教  再次感谢
2021-02-10 18:48
dx002386
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2021-2-9
得分:0 
回复 12楼 yuma
0F XX 00 57 67 替换为  57 YY 00 00 00
XX 是任意的16进制数值, YY=XX-2  (也是16进制的)

XX 的数值是不确定的。。


不考虑汉字问题,只关注16进制数值。。。
2021-02-10 21:47
yuma
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:银河系
等 级:贵宾
威 望:33
帖 子:1883
专家分:2904
注 册:2009-12-22
得分:20 
修复一下前面楼层代码中的Bug,前面楼层代码将不在更新。

本页的代码是正确的,本人只对本页的代码正确性负责。

本页代码可能是最后一次更新,也可能发现Bug不进行任何通知就进行编辑,无Bug的话后继都不会更新。

VB6代码如下:
程序代码:
Function ReadBinary(FileName)
        Const adTypeBinary = 1
        Dim stream, xmldom, node
        Set xmldom = CreateObject("Microsoft.XMLDOM")
        Set node = xmldom.CreateElement("binary")
        node.DataType = "bin.hex"
        Set stream = CreateObject("ADODB.Stream")
        stream.Type = adTypeBinary
        stream.Open
        stream.LoadFromFile FileName
        node.NodeTypedValue = stream.Read
        stream.Close
        Set stream = Nothing
        ReadBinary = node.Text
        Set node = Nothing
        Set xmldom = Nothing
End Function

Sub WriteBinary(FileName, Buf)
        Const adTypeBinary = 1
        Const adSaveCreateOverWrite = 2
        Dim stream, xmldom, node
        Set xmldom = CreateObject("Microsoft.XMLDOM")
        Set node = xmldom.CreateElement("binary")
        node.DataType = "bin.hex"
        node.Text = Buf
        Set stream = CreateObject("ADODB.Stream")
        stream.Type = adTypeBinary
        stream.Open
        stream.write node.NodeTypedValue
        stream.SaveToFile FileName, adSaveCreateOverWrite
        stream.Close
        Set stream = Nothing
        Set node = Nothing
        Set xmldom = Nothing
End Sub

Private Sub Form_Load()
Dim str As String, i As Long, j As String, k As String

str = UCase(ReadBinary("1.fas"))  '获取指定二进制文件的十六进制代码,代码形式:4D5A90000300
'MsgBox str

For i = 1 To Len(str) Step 2
    j = Mid(str, i, 2)
    k = k & " " & j
Next
k = Right(k, Len(k) - 1)  '去除k初次写入的字符串左边的空格
'MsgBox k  '获取格式化之后的十六进制代码,代码形式:4D 5A 90 00 03 00

'替换字符串(有多少替换写多少行):
k = Replace(k, "1E 6F 11 55 55", "00 6D 00 00 00")  '1E 6F 11 55 55 替换为  00 6D 00 00 00
k = Replace(k, "1E E3 11 55 55", "00 E1 00 00 00")  '1E E3 11 55 55 替换为  00 E1 00 00 00

k = Replace(k, " ", "")   '写回二进制前,记得要把格式化之后的十六进制代码还原为格式化之前状态才能写入。
WriteBinary "New_1.fas", k   '写回二进制文件,文件名若为同名则写入相同文件
End Sub




[此贴子已经被作者于2021-2-22 19:50编辑过]


心生万象,万象皆程序!
本人计算机知识网:http://bbs.为防伸手党,本站已停止会员注册。
2021-02-11 07:34
dx002386
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2021-2-9
得分:0 
回复 15楼 yuma
多谢
多谢
多谢
2021-02-11 08:32



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-504849-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019447 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved