谁说不能转成字符串?
byte[] bytes = new byte[]
{
0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x31, 0x32, 0x33, 0x34, 0xff, 0x2a, 0x00
};
var s = Encoding.Default.GetString(bytes);
Console.WriteLine(bytes.Length);
Console.WriteLine(s.Length);
foreach (var c in s)
{
Console.Write("0x{0:X2}, ", (int)c);
}
Console.WriteLine();
数组和字符串都显示长度为13。字符串输出的字节数与数组中的字节数相同。
您可以将其转换为字符串。然后您可以使用正则表达式来查找您要查找的内容。
请注意,Encoding.Default 可能不是您想要的。您需要一个不修改任何字符的 8 字节编码。
但是,如果您想要一种算法方式来做到这一点,那么您会想到几种方法。第一种方法(可能是最简单的)是向前扫描寻找2E,后跟三个字节,然后是00。然后从头再来,看看有没有找到FF FF FF FF XX XX XX XX FF FF FF FF。这不是最快的做事方式,但它非常简单。
请注意,如果您从 2E 向后搜索,您最终可能会“找到”一个较短的字符串。也就是说,如果您的输入是:
FF FF FF FF XX XX XX XX FF FF FF FF 01 02 FF FF FF FF XX XX XX XX FF FF FF FF 0A 0B 2E XX XX XX 00
起始模式有两次出现。如果您从 2E 向后搜索,您会匹配第二个,这可能不是您想要的。
另一种方法是为自己构建一个向前搜索的小型状态机。这样会更快,但会更难一些。