Как я могу эффективно разделить QByteArray?

Я хочу эффективно разделить сообщение QByteArray, поэтому эта функция, которую я реализовал, принимает байты, часть, которую я хочу извлечь, и флаг toEnd, который сообщает, хочу ли я извлечь часть 1 до конца массива. мой дилиметр spcae ' '

пример, если у меня есть:

ba = "HELLO HOW ARE YOU?"
ba1 = getPart(ba, 1, false) -> ba1 = "HELLO"
ba2 = getPart(ba, 2, true) -> ba2 = "HOW ARE YOU?"
ba3 = getPart(ba, 3, false) -> ba3 = "ARE"

приведенная ниже функция работает отлично, но мне интересно, эффективно ли это. следует рассмотреть возможность использования функции разделения?

QByteArray Server::getPart(const QByteArray message, int part, bool toEnd)
{
    QByteArray string;
    int startsFrom = 0;
    int endsAt = 0;
    int count = 0;
    for(int i = 0; i < message.size(); i++)
    {
        if(message.at(i) == ' ')
        {
            count++;
            if(part == count)
            {
                endsAt = i;
                break;
            }
            string.clear();
            startsFrom = i + 1;
        }
        string.append(message.at(i));
    }
    if(toEnd)
    {
        for(int i = endsAt; i < message.size(); i++)
        {
            string.append(message.at(i));
        }
    }
    return string;
}

person gehad    schedule 12.05.2011    source источник


Ответы (2)


Как насчет этого:

  QByteArray Server::getPart(const QByteArray& message, int part, bool toEnd)
  {
    int characters(toEnd ? -1 : message.indexOf(' ', part) - part);

    return message.mid(part, characters);
  }
person JadziaMD    schedule 12.05.2011
comment
Спасибо JadziaMD, мне пришлось немного изменить его, чтобы заставить его работать так, как я хотел. - person gehad; 15.05.2011

Почему бы не сделать его обычным QString и не использовать split. Это даст вам QStringList.

person Bart    schedule 12.05.2011