#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 проблема заключалась в том, что я увеличивал дважды во время цикла, а затем, когда я пытался добраться до следующего элемента и большинства циклов, я не увеличивал индексБольшое вам спасибо