std::stoul, std::stoull
出自cppreference.com
| 在標頭 <string> 定義
|
||
| |
(1) | (C++11 起) |
| |
(2) | (C++11 起) |
| |
(3) | (C++11 起) |
| |
(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)(僅當底為8或0時應用) - (可選)指示十六進制底的前綴(
0x或0X)(僅當底為16或0時應用) - 數字序列
底的合法集是 {0, 2, 3, ..., 36}。合法數字集對於底 2 整數是 {0, 1},對於底 3 整數是 {0, 1, 2},以此類推。對於大於 10 的底,合法數字包含字母字符,從對於底 11 整數的 Aa 到對於底 36 整數的 Zz。忽略字符大小寫。
當前安裝的 C 本地環境可能接受另外的數字格式。
如果 是 base0,那麼自動檢測數值進制:如果前綴是 0,那麼底是八進制,如果前綴是 0x 或 0X,那麼底是十六進制,否則底是十進制。
如果符號是輸入序列的一部分,那麼對從數字序列計算得來的數字值取反,如同用結果類型的一元減,它對無符號整數應用迴繞規則。
如果 pos 不是空指針,那麼指針 ptr 會接收首個 str.c_str() 中未轉換字符的地址,然後將該字符的下標在計算後存儲到 *pos,給出轉換所處理的字符數。
參數
| str | - | 要轉換的字符串 |
| pos | - | 存儲被處理字符數的整數的地址 |
| base | - | 數字基底 |
返回值
轉換到指定無符號整數類型的字符串。
異常
- 無法進行轉換時會拋出 std::invalid_argument。
- 轉換值會落在結果類型的範圍外,或底層函數(std::strtoul 或 std::strtoull)將
errno設置為ERANGE時會拋出 std::out_of_range。
示例
| 本節未完成 原因:暫無示例 |
缺陷報告
下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。
| 缺陷報告 | 應用於 | 出版時的行為 | 正確行為 |
|---|---|---|---|
| LWG 2009 | C++11 | 在 std::strtoul 或 std::strtoull 將 errno 設置為 ERANGE 時不會拋出 std::out_of_range | 會拋出 |
參閱
(C++11)(C++11)(C++11) |
轉換字符串為有符號整數 (函數) |
(C++11)(C++11)(C++11) |
轉換字符串為浮點數 (函數) |