标准是否定义了常见基础?

时间:2018-05-08 17:59:45

标签: c++ decimal standards base strtol

例如,

strtol将基数作为其最后一个参数

我发现在我的所有代码中传递幻数10都没有吸引力。是否已在标准中的某处定义了十进制基数?

3 个答案:

答案 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中解析。)

相关问题