Question

Je veux séparer efficacement un message QbyTeArray, donc cette fonction que j'ai implémentée prenez les octets, la pièce que je souhaite extraire et de tendre le drapeau qui indique si je veux extraire une partie1 jusqu'à la fin de la matrice.mon dilimètre est spcae ''

exemple si j'ai:

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"

La fonction ci-dessous fonctionne simplement bien, mais je me demande si cela est efficace.Devrais-je envisager d'utiliser la fonction Split?

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;
}

Était-ce utile?

La solution

Et ceci:

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

    return message.mid(part, characters);
  }

Autres conseils

Pourquoi ne pas en faire un qstring régulier et utiliser Split .Cela vous donnera une QStringlist.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top