函式
<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 沒有指向一個有效的指標物件,將導致未定義行為

另見