How to convert QString to int?

前端 未结 7 1942
执念已碎
执念已碎 2021-02-01 12:10

I have a QString in my sources. So I need to convert it to integer without \"Kb\".

I tried Abcd.toInt() but it does not work

7条回答
  •  醉梦人生
    2021-02-01 12:33

    You don't have all digit characters in your string. So you have to split by space

    QString Abcd = "123.5 Kb";
    Abcd.split(" ")[0].toInt();    //convert the first part to Int
    Abcd.split(" ")[0].toDouble(); //convert the first part to double
    Abcd.split(" ")[0].toFloat();  //convert the first part to float
    

    Update: I am updating an old answer. That was a straight forward answer to the specific question, with a strict assumption. However as noted by @DomTomCat in comments and @Mikhail in answer, In general one should always check whether the operation is successful or not. So using a boolean flag is necessary.

    bool flag;
    double v = Abcd.split(" ")[0].toDouble(&flag); 
    if(flag){
      // use v
    }
    

    Also if you are taking that string as user input, then you should also be doubtful about whether the string is really splitable with space. If there is a possibility that the assumption may break then a regex verifier is more preferable. A regex like the following will extract the floating point value and the prefix character of 'b'. Then you can safely convert the captured strings to double.

    ([0-9]*\.?[0-9]+)\s+(\w[bB])
    

    You can have an utility function like the following

    QPair split_size_str(const QString& str){
        QRegExp regex("([0-9]*\\.?[0-9]+)\\s+(\\w[bB])");
        int pos = regex.indexIn(str);
        QStringList captures = regex.capturedTexts();
        if(captures.count() > 1){
            double value = captures[1].toDouble(); // should succeed as regex matched
            QString unit = captures[2]; // should succeed as regex matched
            return qMakePair(value, unit);
        }
        return qMakePair(0.0f, QString());
    }
    

提交回复
热议问题