2013-10-24 3 views
1

큰 숫자에 문제가 있습니다. QSettings에서 번호를 검색합니다.Qt 데이터 형식이 큰 숫자로 오류가 발생했습니다.

settings.beginGroup("filesizes"); 
this->fileSize = settings.value(309355).toLongLong(); 
qDebug() << __FILE__ << ":" << __LINE__ << std::numeric_limits<qlonglong>::max();    
qDebug() << __FILE__ << ":" << __LINE__ << "this->filesize: " << this->fileSize; 
qDebug() << "loaded filesize" << this->fileSize; 

설정에 저장된 숫자는 12062891612 (~ 11, xGB)입니다. 네 번째 줄은 "-822010276"을 반환하고 나는 왜 그런지 이해하지 못합니다. this-> fileSize는 qint64입니다. 나는 설정에서 숫자를 줄였습니다. 그리고 작을수록 작습니다. 2147483647 (2^31-1) 모든 것이 문제가되지 않지만, 음수를 얻는 것 이상입니다. 나는 longlong과 qint64가 충분해야하기 때문에 그것을 이해하지 못한다! 누구나 아이디어를 가지고 있습니까?

미리 감사드립니다.

+0

대신 QVariant :: toULongLong()을 사용하면 같은 결과가 나타 납니까? – vahancho

답변

0

2^32-1보다 큰 최대 크기를 얻으려면 데이터 유형을 quint64로 전환해야합니다. 단지 한 가지 추가 비트 만 제공하기 때문에 실제로 언젠가는 그 크기가 커질 수 있으며 나중에 KB 나 MB로 크기를 저장하는 등보다 창의적인 솔루션이 필요합니다.

0

문제는 다른 곳에서 발생하는 것으로 보입니다. 제공된 코드는 정상적으로 작동하며 QSettings이나 QVariant도 긴 long 값을 자릅니다.

관련 문제