Какой самый безопасный и лучший способ получить unsigned long из строки на C++?Как вы получаете неподписанный длинный конец строки?
Я знаю о нескольких возможных методах.
Во-первых, преобразование подписанного долго взято из atol.
char *myStr; // Initalized to some value somehow.
unsigned long n = ((unsigned)atol(myStr));
Очевидная проблема заключается в том, что происходит, когда значение, хранящееся в myStr, больше, чем подписанное long, может содержать? Что получает atol?
Следующая возможность - использовать strtoul.
char *myStr; // Initalized to some value somehow.
unsigned long n = strtoul(myStr, 0, 10);
Однако, это немного сложнее для моих нужд. Мне нужна простая функция, строка в, unsigned long base 10 out. Кроме того, обработка ошибок оставляет желать лучшего.
Окончательная возможность, которую я нашел, - использовать sscanf.
char *myStr; // Initalized to some value somehow.
unsigned long n = 0;
if(sscanf(myStr, "%lu", n) != 1) {
//do some error handling
}
Опять же, обработка ошибок оставляет желать лучшего и немного сложнее, чем хотелось бы.
Оставшаяся очевидная опция заключается в том, чтобы написать мою собственную оболочку вокруг одной из предыдущих возможностей или какую-то вещь, которая проходит через строку и вручную преобразует каждую цифру, пока не достигнет ULONG_MAX.
Мой вопрос в том, какие другие параметры, которые не удалось найти моему google-fu? Любая вещь в библиотеке std C++, которая будет чисто преобразовывать строку в unsigned long и исключать исключения при ошибке?
Приносим извинения, если это обман, но я не мог найти никаких вопросов, которые точно совпадали с моим.
'atol':« Если правильное значение выходит за пределы диапазона представляемых значений, возвращается LONG_MAX или LONG_MIN ». http://www.cplusplus.com/reference/clibrary/cstdlib/atol/ –
Пара вопросов, я не уверен, что они дубликаты: (1) http://stackoverflow.com/questions/1243428/convert- string-to-int-with-bool-fail-in-c/1243435 (2) http://stackoverflow.com/questions/1435253/c-syntax-question-if-var-type-int/1435268 – GManNickG
Я не знаю Не понимаю, что у вас есть против strtoul. Это идеальная функция для этого. Передайте 0 для базы и преобразуйте числа с любыми базовыми префиксными строками, которые понимает ваша библиотека C, например «0x». –