JsonCpp не защищает от переполнения uint64 и ведет себя странно ⇐ C++
JsonCpp не защищает от переполнения uint64 и ведет себя странно
Я экспериментирую с 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
Я экспериментирую с 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
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Пока цикл ведет себя странно при использовании вектора::size() [дубликат]
Anonymous » » в форуме C++ - 0 Ответы
- 38 Просмотры
-
Последнее сообщение Anonymous
-