使用字符串从查找表生成数据的字节数组

时间:2011-11-29 20:59:41

标签: c# arrays bytearray

我有这个程序正在从textbox读取测试字符串并将其转换为一个字节数组,该数组要将数据显示在屏幕上。我越走越近了。代码当前可以拉取文本,将其转换为char数组,然后将字节数组中的零替换为来自2维数组的有用数据,该数组包含5位字母表的所有字母。我有一个问题。代码似乎只运行一次。如果我第二次单击该按钮,最终会出现“未处理的indexOutOfRange异常”。此外,它似乎一次只能用于一个字母

EX:如果我输入“A”,它会显示,但如果我输入“AA”,我会得到同样的错误。 这是WordArray []

byte[,] Letters = new byte[18, 5] { { 63, 72, 72, 63, 0 },
                                       { 127, 73, 73, 54, 0 },
                                       { 63, 72, 72, 63, 0 },
                                       { 127, 73, 73, 54, 0 },
                                       { 63, 72, 72, 63, 0 },
                                       { 127, 73, 73, 54, 0 }, 
                                       { 63, 72, 72, 63, 0 },
                                       { 127, 73, 73, 54, 0 }, 
                                       { 63, 72, 72, 63, 0 }, 
                                       { 127, 73, 73, 54, 0 },
                                       { 63, 72, 72, 63, 0 },
                                       { 127, 73, 73, 54, 0 },
                                       { 63, 72, 72, 63, 0 },
                                       { 127, 73, 73, 54, 0 }, 
                                       { 63, 72, 72, 63, 0 },
                                       { 127, 73, 73, 54, 0 },
                                       { 63, 72, 72, 63, 0 },
                                       { 127, 73, 73, 54, 0 } };

以下是click_button方法:

    int Aindex = 0;
    int LettersIndex = 0;
    private void SendButton_Click(object sender, EventArgs e)
    {
        WordIndex = 0;
        if (Aindex > 0)
        {
            Aindex = 0;
        }
        string CurrentTextString = textBox1.Text;
        char[] charArray = CurrentTextString.ToCharArray();
        if (textBox1.Text == "")
        {

        }
        else
        {
            foreach (char c in charArray)
            {
                int index = 0;
                CharAsciiArray[index] = Convert.ToChar((Convert.ToInt32(c)));
                textBox2.Text += CharAsciiArray[index] + " ";
                charCount++;
                index++;
            }
            for (int NumberofBytes = 0; NumberofBytes < charCount; NumberofBytes++)
            {

                LettersIndex = 0;
                // int currentChar = CharAsciiArray[index] - 65;
                //textBox2.Text += currentChar;
                int currentCharAscii = (CharAsciiArray[Aindex]);
                int currentChar = currentCharAscii - 'A';
                for (int NumberofBits = 0; NumberofBits < 5; NumberofBits++)
                {


                    // textBox2.Text += currentChar;
                    WordArray[WordIndex + 3] = Letters[currentChar, LettersIndex];
                    textBox2.Text += WordArray[WordIndex] + " ";
                    LettersIndex++;
                    WordIndex++;
                }
                Aindex++;
            }
            SendingData = true;
            //SendNextByte();

            serialPort1.Write(WordArray, 0, WordArray.Length);
        }
    }

1 个答案:

答案 0 :(得分:0)

在以下循环中

  foreach (char c in charArray)
  {
      int index = 0;
      CharAsciiArray[index] = Convert.ToChar((Convert.ToInt32(c)));
      textBox2.Text += CharAsciiArray[index] + " ";
      charCount++;
      index++;
  }

您显然希望在每次迭代时增加索引,但每次都将索引重置为0。

除此之外,请考虑在命名变量时要遵循的模式。例如:

为什么AIndex不是AnIndex,您如何命名下一个索引? AnotherIndex?它需要是全球性的吗?为什么charArray以小写c开头,NumberOfBytes以大写N开头?编写代码就像你必须向你的妻子/丈夫(谁知道?)解释它一样,并且维护/调试会更容易。