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

本文关键字:比较 uint 文件 读取 字节数 | 更新日期: 2023-09-27 18:20:47

我正在从特定文件中读取前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,而不是转换它?

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

我会完全跳过十六进制转换,只使用滑动转换,这是假设VALUE可以在前20个字节中的任何位置找到:

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();
}

实际情况是,您立即将前20个字节读取到缓冲区中,然后使用for循环搜索缓冲区,将当前位置(i)的4个字节转换为uint,并将其与VALUE进行比较。