函数
<cstdlib>

strtoull

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

此函数的操作类似于 strtol 来解释字符串,但生成 `unsigned long long int` 类型(有关解释过程的详细信息,请参阅 strtol)。

参数

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

返回值

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

示例

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

int main ()
{
  char szNumbers[] = "250068492 7b06af00 1100011011110101010001100000 0x6fffff";
  char * pEnd;
  unsigned long long int ulli1, ulli2, ulli3, ulli4;
  ulli1 = strtoull (szNumbers, &pEnd, 10);
  ulli2 = strtoull (pEnd, &pEnd, 16);
  ulli3 = strtoull (pEnd, &pEnd, 2);
  ulli4 = strtoull (pEnd, NULL, 0);
  printf ("The decimal equivalents are: %llu, %llu, %llu and %llu.\n", ulli1, ulli2, ulli3, ulli4);
  return 0;
}

输出

The decimal equivalents are: 250068492, 2064035584, 208622688 and 7340031.


数据竞争

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

异常 (C++)

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

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

另见