C++ 转换为整数/浮点类型

示例

std::string可以使用转换函数将包含数字的转换为整数类型或浮点类型。

请注意,所有这些函数在遇到非数字字符后"123abc"都会立即停止解析输入字符串,因此将转换为123。


该std::ato*系列函数C风格字符串(字符数组)转换为整数或浮点类型:

std::string ten = "10";

double num1 = std::atof(ten.c_str());
int num2 = std::atoi(ten.c_str());
long num3 = std::atol(ten.c_str());

C ++ 11
long long num4 = std::atoll(ten.c_str());

但是,不建议使用这些函数,因为0如果它们无法解析字符串,则它们将返回。这很不好,因为0例如输入字符串为“ 0”,这也可能是有效结果,因此无法确定转换是否真正失败。

较新std::sto*的函数系列将std::strings转换为整数或浮点类型,如果它们无法解析其输入,则抛出异常。如果可能,您应该使用以下功能

C ++ 11
std::string ten = "10";

int num1 = std::stoi(ten);
long num2 = std::stol(ten);
long long num3 = std::stoll(ten);

float num4 = std::stof(ten);
double num5 = std::stod(ten);
long double num6 = std::stold(ten);

此外,与该std::ato*系列不同,这些函数还处理八进制和十六进制字符串。第二个参数是指向输入字符串(此处未显示)中第一个未转换字符的指针,第三个参数是要使用的基数。0是自动检测八进制(以开头0)和十六进制(以0x或开头0X)的值,其他任何值都是要使用的基数

std::string ten = "10";
std::string ten_octal = "12";
std::string ten_hex = "0xA";

int num1 = std::stoi(ten, 0, 2); // 返回2
int num2 = std::stoi(ten_octal, 0, 8); // 返回10
long num3 = std::stol(ten_hex, 0, 16);  // 返回10
long num4 = std::stol(ten_hex);  // 返回0
long num5 = std::stol(ten_hex, 0, 0); // 返回10 as it detects the leading 0x