Как эффективно разделить 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;
}
2 ответа
Решение
Как насчет этого:
QByteArray Server::getPart(const QByteArray& message, int part, bool toEnd)
{
int characters(toEnd ? -1 : message.indexOf(' ', part) - part);
return message.mid(part, characters);
}
Почему бы не сделать его обычным QString и не использовать split. Это даст вам QStringList.