C++ Bencode的Qt解析方法

C++ Bencode的Qt解析方法,c++,qt,parsing,lexical-analysis,C++,Qt,Parsing,Lexical Analysis,我正在创建一个简单的解析器,作为熟悉该类的练习 我当前的方法创建一个Bencode对象,其行为类似于扫描仪,并通过递增地推进字符串指针(pos)进行解析,从而生成如下代码(bEncoded是一个Bencode): void Bencode::parseInteger(){ qDebug()所以我想我找到了一种内存占用较少的方法。我可以使用QString::mid()来提取子字符串,而不是到处创建QChar并进行比较。例如,整数解析器变成: int Bencode::parseInteger()

我正在创建一个简单的解析器,作为熟悉该类的练习

我当前的方法创建一个Bencode对象,其行为类似于扫描仪,并通过递增地推进字符串指针(
pos
)进行解析,从而生成如下代码(
bEncoded
是一个Bencode):

void Bencode::parseInteger(){

qDebug()所以我想我找到了一种内存占用较少的方法。我可以使用QString::mid()来提取子字符串,而不是到处创建QChar并进行比较。例如,整数解析器变成:

int Bencode::parseInteger() {
    qDebug() << "Parsing an Integer";

    // Validate the integer
    if(currentChar() != intChar) {
        qDebug() << "No leading i for integer";
        return 0;
    }
    pos++;
    int len = bEncoded.indexOf(endChar,pos)-pos;
    if(len>0) {
        int intBuf = bEncoded.mid(pos,len).toInt();
        qDebug("Integer: %i", intBuf);
        pos = pos+len+1;
        return intBuf;
    } else {
        qDebug("Integer sytax error at %i",pos);
        return 0;
    }
}
intbencode::parseInteger(){
qDebug()
int Bencode::parseInteger() {
    qDebug() << "Parsing an Integer";

    // Validate the integer
    if(currentChar() != intChar) {
        qDebug() << "No leading i for integer";
        return 0;
    }
    pos++;
    int len = bEncoded.indexOf(endChar,pos)-pos;
    if(len>0) {
        int intBuf = bEncoded.mid(pos,len).toInt();
        qDebug("Integer: %i", intBuf);
        pos = pos+len+1;
        return intBuf;
    } else {
        qDebug("Integer sytax error at %i",pos);
        return 0;
    }
}