2011-05-12 6 views
2

QByteArray 메시지를 효율적으로 분할하려고하므로이 함수는 바이트, 추출 할 부분 및 배열 끝까지 part1을 추출 할 것인지를 나타내는 toEnd 플래그를 취합니다.어떻게 효율적으로 QByteArray를 파티션 할 수 있습니까?

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" 

아래의 기능이 잘 작동하지만,이 효율적 있는지 궁금 오전 : 내 dilimeter 나는 경우 '

예'spcae이다. 분할 기능 사용을 고려해야합니까?

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

.
+0

감사 JadziaMD, 나는 그것이 내가 원하는 동일한 방식으로 작동하도록하기 위해 약간 변경했다 : 이것에 대해 어떤 – gehad

3

일반 QString으로 만들고 split을 사용하지 않는 이유는 무엇입니까? 그러면 QStringList가 생깁니다.

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

    return message.mid(part, characters); 
    }