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