将文件读取的字节与uint值进行比较

时间:2015-11-05 15:47:59

标签: c# byte

我从特定文件中读取了前x个字节:

        uint LIBPCAP_MAGIC = 0xa1b2c3d4;
        uint LIBPCAP_MAGIC_ENDIAN = 0xd4c3b2a1;

        using (BinaryReader binaryReader = new BinaryReader(File.Open("file", FileMode.Open)))
        {
            byte[] buffer = binaryReader.ReadBytes(50);

            for (int i = 0; i < buffer.Length - 4; i++)
            {
                uint currentValue = BitConverter.ToUInt32(buffer, i);
                if (currentValue == LIBPCAP_MAGIC || currentValue == LIBPCAP_MAGIC_ENDIAN)
                    Console.WriteLine("FOUND!!!");
            }
        }

之后我有这个常数uint值:

uint LIBPCAP_MAGIC_NUMBER = 0xd4c3b2a1;

我想确定我的第一个x bytes(在此示例中为20个字节)是否包含此uint值。

所以在这个例子中我有这个string hex,但我想知道这是否是读取字节并转换为string hex的最佳方法。 也许我需要阅读bytes而不是转换它?

1 个答案:

答案 0 :(得分:2)

我完全跳过十六进制转换,只使用滑动转换,假设在前20个字节中可以找到{em> 任何

VALUE

发生的事情是你立即将前20个字节读入缓冲区,然后使用for循环搜索缓冲区,将当前位置的4个字节(public static void Main() { uint VALUE = 0xe3c6a7d1; using (BinaryReader binaryReader = new BinaryReader(File.Open("File.bin", FileMode.Open))) { byte[] buffer = binaryReader.ReadBytes(20); for (int i = 0; i < buffer.Length - 4; i++) { byte[] temp = new byte[4]; Buffer.BlockCopy(buffer, i, temp, 0, 4); temp = temp.Reverse().ToArray(); uint currentValue = BitConverter.ToUInt32(temp, 0); if (currentValue == VALUE) Console.WriteLine("FOUND!!!"); } } Console.ReadLine(); } )转换为{ {1}}并将其与i进行比较。