0

从 QByteArray 开始,我想在我的 QByteArray 中搜索 "\n" 字符,并将所有字符从开头连接到 "\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],因为当计数器增加时我无法检查每个字节。

解决方案?

4

2 回答 2

7

您可以省去麻烦,而且很简单:

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

这将为您提供一个为每个换行符拆分的字符串列表,这就是您听起来想要做的事情。

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

于 2015-04-17T14:47:37.503 回答
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
    **/
}

但是根据您的问题,当您说您“无法检查每个字节”时并不清楚。如果你知道可用内存的音调,你可以使用原始数据:

const char * ptr = MyArray.constData();

并使用自定义验证器:

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

ow 以及在 C/C++ 中:

"\n" != 'n'

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

于 2015-04-17T15:02:03.070 回答