где ОШИБКА в моем коде «Проблема вне границ»

#c# #.net #.net-core #pdu

#c# #.net #.net-core #pdu

Вопрос:

я пытаюсь создать метод декодирования PDU ДЛЯ модемов «GSM» (ussd-сообщения), все работает нормально, но у меня возникает ошибка с надписью «index out of Bounds», даже если я исправлю это в одном месте, это произойдет в других местах

я надеюсь, что вы сможете направить меня к решению этой проблемы

  public static string PduDecode(byte[] bytes)
    {
        string result = string.Empty;

       
       string[] mymessage = new string[(bytes.Length/2)  1];
      
       


       int index = 0;
       while (index < mymessage.Length - 1)
       {
            mymessage[index]= Convert.ToString(bytes[index], 2).PadLeft(8, '0');
            index  ;
       }

       mymessage[index] =string.Empty;

       while (index >= 0)
       {
            if (!string.IsNullOrWhiteSpace(mymessage[index]))
            {
                mymessage[index] = mymessage[index].Substring(0, index 1);
                mymessage[index]=mymessage[index].PadLeft(8, '0');
            }
            index--;
        }
        index = 0;
       while (index < mymessage.Length-1)
       {
           mymessage[index] = Convert.ToInt32(mymessage[index], 2).ToString("X");
            index  ;
       }

       result =string.Join("",mymessage);
       result=HexStringToString(result);




       return resu<


    }
 

Комментарии:

1. Что это вообще должно делать? mymessage[index 1] =string.Empty Вы обращаетесь к массиву за пределами его размера и по какой причине? Я также не понимаю, что вы пытаетесь сделать в этих while циклах. Начните с записи ваших ожиданий от этого кода, затем выполните его в отладчике. Вы увидите, что вы игнорируете возвращаемые значения и не изменяетесь index , поэтому у вас бесконечные циклы.

2. Можете ли вы указать строку, в которой это происходит?

3. @CodeCaster при декодировании сообщения PDU нам нужно создать 8-й байт для восстановления предыдущего сообщения, наш входной массив имеет 7 слотов, в то время как у выходного массива должно быть 8 слотов, надеюсь, мое объяснение понятно

4. Индекс увеличивается на последней итерации первого цикла. Просто выполните свой код, используя F10 и F11, чтобы перейти к методам. Посмотрите на соответствующие переменные на каждом шаге и убедитесь, что они подтверждают ваши ожидания.

5. @IvanKhorin я изменил цвет строки ошибки на синий

Ответ №1:

я нашел ответ на свою проблему, и метод отлично сработал после того, как попробовал то, что предложил @CodeCaster, и благодаря замечаниям @IvanKhorin проблема заключалась в том, что я увеличивал дважды во время цикла, а затем, когда я пытался добраться до следующего элемента и большинства циклов, я не увеличивал индексБольшое вам спасибо