strtol
将基数作为其最后一个参数
我发现在我的所有代码中传递幻数10
都没有吸引力。是否已在标准中的某处定义了十进制基数?
答案 0 :(得分:2)
我认为没有与strtol
一起使用的标准基本定义。但是,还有其他转换函数,其中10
作为基数的默认参数,例如std::string
可用于const char*
,新的std::stoi
可用于{{1}}秒。
答案 1 :(得分:1)
我发现在我的代码中传递了神奇的数字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
答案 2 :(得分:1)
没有为strtol
定义的十进制基本默认值。您可以创建自己的代理功能,例如:
long int strtolBase10(const char *nptr, char **endptr)
{
return strtol(nptr, endptr, 10);
}
值得注意的是,如果使用特殊值0
作为基本参数,strtol将解析为十进制,除非字符串以' 0x'开头。或者' 0X' (它将在基数16中解析)或以' 0'开头。 (它将在基数8中解析。)