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