Использование строки для генерации байтового массива данных из таблицы поиска - PullRequest
0 голосов
/ 30 ноября 2011

У меня есть эта программа, которая читает тестовую строку из textbox и преобразует ее в байтовый массив, данные грима которого будут отображаться на экране. Я очень близко В настоящее время код может извлекать текст, преобразовывать его в массив символов и затем заменять нули в массиве байтов полезными данными из двумерного массива, который содержит 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 голосов
/ 30 ноября 2011

В следующем цикле

  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? Напишите код, как если бы вам пришлось объяснять его своей жене / мужу (кто знает?), И его будет легче поддерживать / отлаживать.

...