C#中實現同位(一)

來源:互聯網
上載者:User

最近在做通訊協議的定義,需要用到校正位,研究了一下同位,發現關於c#的資料很少,就根據原理自己寫了一個,和大家交流一下。

 

// 功能:示範C#中如何?同位
// 描述:通過對byte進行逐位異或進行同位,此方法效率比較低
// 版本:1.0
// 作者:黑頸
// 部落格:http://zbz.cnblogs.com/
// 網店:http://shop36394998.taobao.com/

using System;
using System.Windows.Forms;

namespace ParityCheck
{
    public partial class FrmMain : Form
    {
        public FrmMain()
        {
            InitializeComponent();
        }

        /**//// <summary>
        /// 通過對byte進行逐位異或進行同位,此方法效率比較低
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnXor_Click(object sender, EventArgs e)
        {
            byte bits = Convert.ToByte(txtNumber.Text, 2);
            bool bResultOdd = OddParityCheck(bits);
            MessageBox.Show("奇數同位結果:" + bResultOdd.ToString());
            bool bResultEven = EvenParityCheck(bits);
            MessageBox.Show("偶校正結果:" + bResultEven.ToString());
        }

        /**//// <summary>
        /// 對byte逐位異或進行奇數同位並返回校正結果
        /// </summary>
        /// <param name="AByte">要取bit值的byte,一個byte有8個bit</param>
        /// <returns>如果byte裡有奇數個1則返回true,如果有偶數個1則返回false</returns>
        private bool OddParityCheck(byte AByte)
        {
            return getBit(AByte, 0) ^ getBit(AByte, 1) ^ getBit(AByte, 2) ^ getBit(AByte, 3)
               ^ getBit(AByte, 4) ^ getBit(AByte, 5) ^ getBit(AByte, 6) ^ getBit(AByte, 7);
        }

        /**//// <summary>
        /// 對byte逐位異或進行偶校正並返回校正結果
        /// </summary>
        /// <param name="AByte">要取bit值的byte,一個byte有8個bit</param>
        /// <returns>如果byte裡有偶數個1則返回true,如果有奇數個1則返回false</returns>
        private bool EvenParityCheck(byte AByte)
        {
            return !getBit(AByte, 0) ^ getBit(AByte, 1) ^ getBit(AByte, 2) ^ getBit(AByte, 3)
               ^ getBit(AByte, 4) ^ getBit(AByte, 5) ^ getBit(AByte, 6) ^ getBit(AByte, 7);
        }

        /**//// <summary>
        /// 取一個byte中的第幾個bit的值,
        /// 實在查不到c#有什麼方法,才動手寫了這個函數 -_-#
        /// </summary>
        /// <param name="AByte">要取bit值的byte,一個byte有8個bit</param>
        /// <param name="iIndex">在byte中要取bit的位置,一個byte從左至右的位置分別是0,1,2,3,4,5,6,7</param>
        /// <returns>返回bit的值,不知道C#中bit用什麼表示,似乎bool就是bit,就用它來代替bit吧</returns>
        private bool getBit(byte AByte, int iIndex)
        {
            //MessageBox.Show((AByte >> (7 - iIndex) & 1).ToString());
            //將要取的bit右移到第一位,再與1與運算將其它位置0
            return (AByte >> (7 - iIndex) & 1) != 0 ? true : false;
        }
    }
}

 

這種方法是通過對byte進行逐位異或進行同位,效率比較低,現在有另一構思,想通過把所有可能性列出來放進數組裡,查的時候直接在數組中尋找,這樣效率會比較高,下次有時間再貼出來。

差點忘了,放出源碼:

示範C#中如何?同位程式源碼 

 http://files.cnblogs.com/zbz/SRC/ParityCheck20081101.rar

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.