函数模板
<string>

std::stol

long stol (const string&  str, size_t* idx = 0, int base = 10);long stol (const wstring& str, size_t* idx = 0, int base = 10);
将字符串转换为长整数
该函数解析str,将其内容解释为指定base的整型数字,并将其作为以下类型的值返回:long int.

的值返回。如果idx不是空指针,函数还会将idx的值设置为str中数字之后第一个字符的位置。

该函数使用 strtol(或 wcstol)执行转换(有关转换过程的更多详细信息,请参见 strtol)。

参数

str
具有整型数字表示的字符串对象。
idx
指向类型为 size_t 的对象的指针,其值由函数设置为str中数值之后下一个字符的位置。
该参数也可以是一个空指针,此时它将不被使用。
base
决定有效字符及其解释的数字基数(radix)。
如果此0,则使用的基数由序列中的格式确定(有关详细信息,请参阅strtol)。请注意,默认情况下此参数为10,而不是0.

返回值

成功时,函数将转换后的整型数字作为以下类型的值返回:long int.

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// stol example
#include <iostream>   // std::cout
#include <string>     // std::string, std::stol

int main ()
{
  std::string str_dec = "1987520";
  std::string str_hex = "2f04e009";
  std::string str_bin = "-11101001100100111010";
  std::string str_auto = "0x7fffff";

  std::string::size_type sz;   // alias of size_t

  long li_dec = std::stol (str_dec,&sz);
  long li_hex = std::stol (str_hex,nullptr,16);
  long li_bin = std::stol (str_bin,nullptr,2);
  long li_auto = std::stol (str_auto,nullptr,0);

  std::cout << str_dec << ": " << li_dec << '\n';
  std::cout << str_hex << ": " << li_hex << '\n';
  std::cout << str_bin << ": " << li_bin << '\n';
  std::cout << str_auto << ": " << li_auto << '\n';

  return 0;
}

输出
1987520: 1987520
2f04e009: 788848649
-11101001100100111010: -956730
0x7fffff: 8388607


复杂度

未定义,但通常与解释的字符数呈线性关系。

数据竞争

修改idx指向的值 (如果idx不为零)。

异常

如果无法执行任何转换,则抛出invalid_argument异常。

)。如果读取的值超出了long int,则会抛出 invalid_argumentout_of_range 异常。

无效的idx会导致未定义行为

另见