将读取的文件中的字节与 uint 值进行比较
Compare bytes from file read with uint value
我从特定文件中读取了前 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
而不是转换它?
我会完全跳过十六进制转换,只使用滑动转换,这是假设 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 个字节转换为a uint
并将其与 VALUE
进行比较。
我从特定文件中读取了前 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
而不是转换它?
我会完全跳过十六进制转换,只使用滑动转换,这是假设 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 个字节转换为a uint
并将其与 VALUE
进行比较。