我有一个二进制文件(即包含0x00到0xFF之间值的字节)。文件中还有ASCII字符串(例如,“Hello World”),我想使用正则表达式查找并编辑它们。然后,我需要将编辑后的文件写出,使其与旧文件完全相同,但已执行了我的ASCII编辑。如何实现?
byte[] inbytes = File.ReadAllBytes(wfile);
string instring = utf8.GetString(inbytes);
// use Regex to find/replace some text within instring
byte[] outbytes = utf8.GetBytes(instring);
File.WriteAllBytes(outfile, outbytes);
即使我没有进行任何编辑,输出文件仍然与输入文件不同。发生了什么事情,我应该怎么做才能达到我想要的结果?
编辑:好的,我正在尝试使用提供的建议,并且在实际实现时遇到了困难。下面是我的示例代码:
string infile = @"C:\temp\in.dat";
string outfile = @"C:\temp\out.dat";
Regex re = new Regex(@"H[a-z]+ W[a-z]+"); // looking for "Hello World"
byte[] inbytes = File.ReadAllBytes(infile);
string instring = new SoapHexBinary(inbytes).ToString();
Match match = re.Match(instring);
if (match.Success)
{
// do work on 'instring'
}
File.WriteAllBytes(outfile, SoapHexBinary.Parse(instring).Value);
很显然,我知道这样做不会返回任何匹配结果,但如果我将我的正则表达式转换为字符串(或其他格式),那么我就无法使用Match等函数。有什么好的建议吗?谢谢!