Programming/Qt

[Qt] QString::toInt 주의사항

_SYPark 2024. 6. 24. 14:39
728x90

QString의 toInt는 정수형태의 문자열을 정수로 변환시켜주는 함수입니다. 그런데 이 호출하는 함수에 맞지 않는 문자열 값을 가지고 있으면 제대로 처리가 되지 않습니다.

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QString sUInt   = "123";
    QString sInt    = "-123";
    QString sFloat  = "123.12";

    bool ok;

    qDebug() << sUInt.toUInt(&ok) << ok;
    qDebug() << sInt.toUInt(&ok) << ok;
    qDebug() << sFloat.toUInt(&ok) << ok;

    qDebug() << sUInt.toInt(&ok) << ok;
    qDebug() << sInt.toInt(&ok) << ok;
    qDebug() << sFloat.toInt(&ok) << ok;

    return a.exec();
}

/* 실행결과
123 true
0 false
0 false
123 true
-123 true
0 false
*/

위 실행결과를 보면 알 수 있듯이 해당 함수를 통해 얻고 싶은 자료형이 아닌 문자열이 호출되면 0이 반환되고 인자로 넘겨준 flag에는 false 가 나오게 됩니다.

 

이를 방지하기 위해서는 toInt(), toFloat가 아닌 atoi, atof를 사용하는 것이 좋습니다.

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QString sUInt   = "123";
    QString sInt    = "-123";
    QString sFloat  = "123.12";

    bool ok;

    qDebug() << sUInt.toUInt(&ok) << ok;
    qDebug() << sInt.toUInt(&ok) << ok;
    qDebug() << sFloat.toUInt(&ok) << ok;

    qDebug() << sUInt.toInt(&ok) << ok;
    qDebug() << sInt.toInt(&ok) << ok;
    qDebug() << sFloat.toInt(&ok) << ok;

    qDebug() << atoi(sUInt.toLocal8Bit().constData());
    qDebug() << atoi(sInt.toLocal8Bit().constData());
    qDebug() << atoi(sFloat.toLocal8Bit().constData());

    return a.exec();
}
/* 실행결과
123 true
0 false
0 false
123 true
-123 true
0 false
123
-123
123
*/

 

728x90