JsonCpp не защищает от переполнения uint64 и ведет себя странноC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 JsonCpp не защищает от переполнения uint64 и ведет себя странно

Сообщение Anonymous »


Я экспериментирую с JsonCpp и заметил странное поведение при достижении конца диапазона uint64.

Числа в диапазоне работают правильно. Числа выше диапазона, но между [2**64,2**64+2**10] возвращают 0. Числа выше 2**64+2**10 вызывают исключение.

Ожидается ли это? Могу ли я настроить JsonCpp для выполнения этих проверок за меня?

Заранее спасибо!

Ниже приведен фрагмент кода, демонстрирующий проблему.
#include #include #include #include интервал основной() { //std::string uint64Str = "1234"; // любое число в диапазоне [0, 2**64-1] работает правильно (печатает uint64Str) //std::string uint64Str = "18446744073709551615"; // любое число в диапазоне [0, 2**64-1] работает правильно, включая 2**64-1 (печатает uint64Str) //std::string uint64Str = "18446744073709551616"; //макс. uint64 + 1 напечатаем 0 //std::string uint64Str = "18446744073709551617"; //макс. uint64 + 2 напечатаем 0 // ... //std::string uint64Str = "18446744073709553663"; //макс. uint64 + 2048 напечатаем 0 //std::string uint64Str = "18446744073709553664"; //макс. uint64 + 2049 напечатаем 0 std::string uint64Str = "18446744073709553665"; //max uint64 + 2050 (или более) выдает экземпляр 'Json::LogicError' What(): double вне диапазона UInt64 Json::Корень значения; Json::Reader Reader; bool parsingResult = reader.parse("{\"key\":"+uint64Str+"}", root); std::cout
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»