2. 計算及產生漢明碼

namespace Q2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            var t = textBox1.Text;
            if (t.Length > 11)
            {
                textBox2.Text = "欲傳遞訊息的長度不超過11位元";
                return;
            }
            foreach (var item in t)
            {
                if (item != '0' && item != '1')
                {
                    textBox2.Text = "欲傳遞訊息的值應是0或1";
                    return;
                }
            }

            int k = 0;
            while (Math.Pow(2, k) < t.Length + k + 1)
            {
                k++;
            }


            for (int i = 0; i < k; i++)
            {
                t = t.Insert(t.Length + 1 - (int)Math.Pow(2, i), "x");
            }

            int lastX = -1;
            for (int i = 0; i < t.Length; i++)
            {
                if (t[i] == '1')
                {
                    int v = t.Length - i;
                    if (lastX == -1) lastX = v;
                    else lastX ^= v;
                }
            }
            var ca = t.ToCharArray().ToList();
            foreach (var item in Convert.ToString(lastX, 2).PadLeft(k, '0'))
            {
                ca[ca.IndexOf('x')] = item;
            }
            textBox2.Text = new string(ca.ToArray());
        }
    }
}

Last updated