QByteArray:如何搜索其中的角色

时间:2015-04-17 14:40:17

标签: c++ qt qbytearray

从QByteArray开始,我想搜索" \ n"在我的QByteArray中加入char并加入从开头到#34; \ n"的所有字符。并将它们保存在QString中;之后,我将传递到下一个字节直到下一个" \ n"并将这些保存到新的QString

QByteArray MyArray= (all data from my previous process);
quint16 ByteArrayCount = MyArray.count(); // number of bytes composing MyArray
quint16 mycounter;
QString myString;
while (mycounter < ByteArrayCount)
{
    if(MyArray[mycounter] != "\n")
      myString.append(MyArray[mycounter]);
    mycounter++;
}

这将附加新行之前的所有字节;我的问题是如何评估MyArray [counter],因为我在计数器增加时无法检查每个字节。

解?

2 个答案:

答案 0 :(得分:7)

你可以省去麻烦,简单地说:

QString s(myArray);
QStringList resultStrings = s.split('\n');

这将为您提供每个新行字符分割的字符串列表,这就是您想要做的事情。

另外,不要强调这一点,但你没有初始化你的计数器,你真的应该;)

答案 1 :(得分:0)

这是使用函数hello

的简单示例
QString str = "ooops\nhello mama\n daddy cool";
QByteArray bta;
bta.append(str);
for(quint16 index = bta.indexOf('\n'); 
            index != -1; 
            index = bta.indexOf('\n', index+1)) {
   /**
    * Do something with index
    **/
}

但是根据你的问题,当你说“无法检查每个字节”时,就不那么清楚了。如果您知道可用mem的diapasons,则可以使用原始数据:

const char * ptr = MyArray.constData();

并使用自定义验证器:

while(ptr){
    if(valid(ptr) && ptr == '\n') {
        /**
         * do something ...
         **/
    }
    ptr++;
}

ow以及C / C ++:

"\n" != 'n'

因为“\ n” - 是包含\ n和EOF('\ 0')的const C字符串(char [2])     和'\ n' - 只是简单的C char;