存在符合以下協(xié)議的二進(jìn)制文件

image.png
可以把協(xié)議里的頭類(lèi)型信息轉(zhuǎn)換成字符串來(lái)比較(讀取固定長(zhǎng)度的字節(jié),轉(zhuǎn)換成字符串,查看是否為“##DT”)
下面的方法則直接讀取二進(jìn)制的形式頭類(lèi)型信息,然后和“##DT”的二進(jìn)制形式進(jìn)行比較(這里只是進(jìn)行一下測(cè)試,合適與否要看實(shí)際的應(yīng)用)
public static void Main()
{
MakeBinaryFile();
CompareBitArray();
Console.ReadLine();
}
private static void CompareBitArray()
{
BitArray b1 = GetFileBitArray(@"D:\C");
BitArray b2 = new BitArray(System.Text.Encoding.Default.GetBytes("##DT"));
b1.Xor(b2).Not();//異或操作 然后 非操作
bool allTrue = IsBitArrayAllTrue(b1);
if (allTrue)
{
Console.WriteLine("兩段二進(jìn)制相等");
}
}
private static bool IsBitArrayAllTrue(IEnumerable myArray)
{
bool result = true;
foreach (var item in myArray)
{
if (!(bool)item)
{
result = false;
break;
}
}
return result;
}
private static BitArray GetFileBitArray(string path)
{
FileStream fileStream = new FileStream(path, FileMode.Open);
BinaryReader binaryReader = new BinaryReader(fileStream);
long length = fileStream.Length;
byte[] bytes = new byte[length];
binaryReader.Read(bytes, 0, bytes.Length);
//byte[] content = new byte[1];
//content[0] = bytes[3];
return new BitArray(bytes);
}
private static void MakeBinaryFile()
{
using (BinaryWriter bw = new BinaryWriter(new FileStream(@"D:\C", FileMode.Create)))
{
//string s = "##DT";
//bw.Write(s);
//直接寫(xiě)入字符串,二進(jìn)制里會(huì)多一或者兩個(gè)字節(jié),表示string的長(zhǎng)度,叫長(zhǎng)度前綴(length - prefixed)
//這是供BinaryReader的ReadString方法用,知道長(zhǎng)度,它才知道要讀取到哪里。
//要寫(xiě)入干凈的string二進(jìn)制,需要轉(zhuǎn)成byte[]
bw.Write(System.Text.Encoding.Default.GetBytes("##DT"));
}
}