strtol
, например, принимает базу в качестве последнего аргумента
Я нахожу прохождение в магическом числе 10
во всем моем коде, чтобы быть непривлекательным. Десятичная база уже определена где-то в стандарте?
Я не думаю, что есть какое-либо стандартное базовое определение для использования с strtol
, Однако есть альтернативные функции преобразования, которые имеют 10
в качестве аргумента по умолчанию для базы, такой как std::stoi
который работает на std::string
с, и новый std::from_chars
который работает на const char*
s.
Я считаю, что передача магического числа 10 во всем коде не привлекательна.
Ты можешь использовать 0
за base
и пусть реализация выводит базу.
auto v1 = strtol("101", nullptr, 0); // base is deduced to be 10
auto v2 = strtol("078", nullptr, 0); // base is deduced to be 8
auto v3 = strtol("0xF09", nullptr, 0); // base is deduced to be 16
Там нет десятичного базового значения по умолчанию, определенного для strtol
, Вы можете создать свою собственную прокси-функцию, например:
long int strtolBase10(const char *nptr, char **endptr)
{
return strtol(nptr, endptr, 10);
}
Стоит отметить, что если вы используете специальное значение 0
в качестве базового параметра strtol будет анализироваться как десятичное число, если строка не начинается с «0x» или «0X» (она будет анализироваться в базе 16) или начинается с «0» (она будет анализироваться в базе 8).