C# 用BitArray 實(shí)現(xiàn)解析協(xié)議時(shí)的二進(jìn)制比較

存在符合以下協(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"));
            }
        }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容