2013-10-24 7 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, x ГБ в байтах). Четвертая строка возвращает мне «-822010276», и я не понимаю, почему. this-> fileSize - qint64. Я уменьшил число в настройках, и пока он меньше, чем 2147483647 (2^31-1), все в порядке, но выше я получаю отрицательные числа. Я этого не понимаю, потому что longlong и qint64 должно быть достаточно ?! У кого-нибудь есть идея, что происходит не так?

благодарит заранее!

+0

Использует ли 'QVariant :: toULongLong()' вместо этого тот же результат? – vahancho

ответ

0

Вам нужно переключить свой тип данных на quint64, чтобы получить максимальный максимальный размер 2^32-1. Это дает вам только один дополнительный бит, и на самом деле кажется, что вам может показаться, что в какой-то момент вам придётся придумать более креативное решение, такое как сохранение вашего размера в KB или MB в будущем.

0

Проблема находится в другом месте. Предоставленный фрагмент кода работает нормально, и ни QSettings, ни QVariant не выполняет никаких укорочений длинных длинных значений.

Смежные вопросы