std::stoul, std::stoull

出自cppreference.com
 
 
 
std::basic_string
 
在標頭 <string> 定義
unsigned long      stoul ( const std::string& str,
                           std::size_t* pos = nullptr, int base = 10 );
(1) (C++11 起)
unsigned long      stoul ( const std::wstring& str,
                           std::size_t* pos = nullptr, int base = 10 );
(2) (C++11 起)
unsigned long long stoull( const std::string& str,
                           std::size_t* pos = nullptr, int base = 10 );
(3) (C++11 起)
unsigned long long stoull( const std::wstring& str,
                           std::size_t* pos = nullptr, int base = 10 );
(4) (C++11 起)

轉譯字符串 str 中的無符號整數值。

ptr 為(提供給轉換函數的)一個類型是 char* (1,3)wchar_t* (2,4) 的內部指針:

1) 調用 std::strtoul(str.c_str(), &ptr, base)
2) 調用 std::wcstoul(str.c_str(), &ptr, base)
3) 調用 std::strtoull(str.c_str(), &ptr, base)
4) 調用 std::wcstoull(str.c_str(), &ptr, base)

捨棄所有空白符(以調用 std::isspace 鑑別),直到找到首個非空白符,然後取儘可能多的字符組成合法的底 n (其中 n=base)的無符號整數表示,並將它們轉換成一個整數。合法的無符號整數由下列部分組成:

  • (可選)正或負號
  • (可選)指示八進制底的前綴(0)(僅當底為 80 時應用)
  • (可選)指示十六進制底的前綴(0x0X)(僅當底為 160 時應用)
  • 數字序列

底的合法集是 {0, 2, 3, ..., 36}。合法數字集對於底 2 整數是 {0, 1},對於底 3 整數是 {0, 1, 2},以此類推。對於大於 10 的底,合法數字包含字母字符,從對於底 11 整數的 Aa 到對於底 36 整數的 Zz。忽略字符大小寫。

當前安裝的 C 本地環境可能接受另外的數字格式。

如果 base0,那麼自動檢測數值進制:如果前綴是 0,那麼底是八進制,如果前綴是 0x0X,那麼底是十六進制,否則底是十進制。

如果符號是輸入序列的一部分,那麼對從數字序列計算得來的數字值取反,如同用結果類型的一元減,它對無符號整數應用迴繞規則。

如果 pos 不是空指針,那麼指針 ptr 會接收首個 str.c_str() 中未轉換字符的地址,然後將該字符的下標在計算後存儲到 *pos,給出轉換所處理的字符數。

參數

str - 要轉換的字符串
pos - 存儲被處理字符數的整數的地址
base - 數字基底

返回值

轉換到指定無符號整數類型的字符串。

異常

  • 無法進行轉換時會拋出 std::invalid_argument
  • 轉換值會落在結果類型的範圍外,或底層函數(std::strtoulstd::strtoull)將 errno 設置為 ERANGE 時會拋出 std::out_of_range

示例

缺陷報告

下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。

缺陷報告 應用於 出版時的行為 正確行為
LWG 2009 C++11 std::strtoulstd::strtoullerrno 設置為 ERANGE 時不會拋出 std::out_of_range 會拋出

參閱

(C++11)(C++11)(C++11)
轉換字符串為有符號整數
(函數) [編輯]
(C++11)(C++11)(C++11)
轉換字符串為浮點數
(函數) [編輯]