函数
<cstdlib>

strtoll

long long int strtoll (const char* str, char** endptr, int base);
将字符串转换为长长整数
该函数解析C风格字符串 str,将其内容解释为指定 base 的整数,并以 long long int 类型返回。如果 endptr 不是空指针,则该函数还会将 endptr 的值设置为指向数字之后的第一个字符。

该函数的操作类似于 strtol 来解析字符串,但产生 long long int 类型的值(有关解析过程的详细信息,请参见 strtol)。

参数

str
以整数表示开头的 C 字符串。
endptr
char* 类型对象的引用,其值由函数设置为 str 中数值之后的下一个字符。
该参数也可以是一个空指针,此时它将不被使用。
base
决定有效字符及其解释的数字基数(radix)。
如果为 0,则使用的基数由序列中的格式决定(有关详细信息,请参见 strtol)。

返回值

成功时,该函数将转换后的整数值以 long long int 类型返回。
如果无法执行有效的转换,则返回零值(0LL)。
如果读取的值超出了 long long int 的可表示范围,则函数返回 LLONG_MAXLLONG_MIN(在 <climits> 中定义),并且 errno 被设置为 ERANGE

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/* strtoll example */
#include <stdio.h>      /* printf, NULL */
#include <stdlib.h>     /* strtoll */

int main ()
{
  char szNumbers[] = "1856892505 17b00a12b -01100011010110000010001101100 0x6fffff";
  char* pEnd;
  long long int lli1, lli2, lli3, lli4;
  lli1 = strtoll (szNumbers, &pEnd, 10);
  lli2 = strtoll (pEnd, &pEnd, 16);
  lli3 = strtoll (pEnd, &pEnd, 2);
  lli4 = strtoll (pEnd, NULL, 0);
  printf ("The decimal equivalents are: %lld, %lld, %lld and %lld.\n", lli1, lli2, lli3, lli4);
  return 0;
}

可能的输出

The decimal equivalents are: 1856892505, 6358606123, -208340076 and 7340031


数据竞争

str 指向的数组被访问,endptr 指向的指针被修改(如果非空)。

异常 (C++)

无异常保证:此函数从不抛出异常。

如果 str 没有指向一个有效的 C 字符串,或者 endptr 没有指向一个有效的指针对象,将导致未定义行为

另见