我试图从二进制文件中提取一些信息。它看起来像这样:
AUTHCODE(here goes 3 bytes, that I don't need)part_that_i_need(here goes a NULL byte)
。
如何匹配字节{11} {00} {38}和{00}之间的字母数字字符qszjlbnkmctkkezgd_qyzkyptqigudilzpkp_qgetefvmigwimrihudk
部分。
这是我到目前为止所做的:
string ReadFileMF;
using (StreamReader reader = new StreamReader(pathCopy))
{
ReadFileMF = reader.ReadToEnd();
}
///match the whole string
Match passMF = Regex.Match(ReadFileMF, @"(AUTHCODE).+?(www)");
String passMFs = passMF.Value;
//convert to array of bytes
byte[] bpass = StrToByteArray(passMFs);
//replace the 3 bytes after AUTHCODE with spaces
bpass[8] = 0x20;
bpass[9] = 0x20;
bpass[10] = 0x20;
好的,现在我只想在最后匹配nullbyte。像(AUTHCODE).+?(NULL_BYTE)
这样的东西。有什么想法吗?
答案 0 :(得分:0)
通过字节数据上的一些简单的for循环或Copy()操作,这可能是最简单的。确切的规格太少了。像:
// untested, I could be off-by-1 somewhere
int start = "AUTHCODE".Length + 3;
int end = text.Indexof('\0', start);
string result = text.SubString(start, end-start);
如果您确实需要/需要正则表达式,您必须先将其变为字符串。您唯一安全的赌注似乎是ASCII编码。
string text = Encoding.ASCII.GetString(data);
然后(未经测试)
Regex.Match(text, "AUTHCODE.{3}([^\0x00]+)\0x00);