我正在创建一个简单的Qt Bencode解析器,作为熟悉QString类的练习。
我当前的方法创建了一个 Bencode 对象,其行为类似于扫描仪,并通过递增地推进字符串指针 ( pos
) 进行解析,从而生成如下所示的代码 (bEncoded
是 Bencode QString ):
void Bencode::parseInteger() {
qDebug() << "Parsing an Integer";
if(bEncoded.at(pos) != intChar) {
qDebug() << "No leading i for integer";
return;
}
pos++;
QString buf;
if(bEncoded.at(pos).isNumber() || bEncoded.at(pos) == negChar) {
buf.append(bEncoded.at(pos));
pos++;
}
while(bEncoded.at(pos).isNumber()) {
buf.append(bEncoded.at(pos));
pos++;
}
if(!bEncoded.at(pos).unicode() == 'e') {
qDebug() << "No training e for integer";
return;
}
pos++;
qDebug("Integer: %i", buf.toInt());
}
我想知道这是否是一种简洁的方法。好像我在滥用QString::at()
和QChar==
。当我看到它时,我认为 RegEx 可能更简洁,但我想我也会在这里征求一些意见。
那么 - 如何改进这种方法?
所有代码在这里:https ://github.com/jif/Bencode