字串轉換為數值函式
備註
系列中的每個 strto*
函式會將以 Null 結尾的字串轉換成數值。 下表列出可用的函式。
函式 | 描述 |
---|---|
strtod |
將字串轉換為雙精確度浮點值 |
strtol |
將字串轉換為 long 整數 |
strtoul |
將字串轉換為 unsigned long 整數 |
_strtoi64 |
將字串轉換為 64 位元 __int64 整數 |
_strtoui64 |
將字串轉換為不帶正負號的 64 位元 __int64 整數 |
wcstod
、wcstol
、wcstoul
和 _wcstoi64
分別是寬字元版本的 strtod
、strtol
、strtoul
和 _strtoi64
。 所有這些寬字元函式的字串引數都是寬字元字串;否則,每個函式與其單一位元組字元對應項目的行為完全相同。
函 strtod
式接受兩個自變數:第一個是輸入字串,第二個是結束轉換程式的字元指標。 strtol
、 strtoul
和 _strtoi64
_strtoui64
會採用第三個自變數做為轉換程式中使用的數位基底。
輸入字串是一串字元,可解譯為所指定類型的數值。 每個函式都會在無法辨識為數位一部分的第一個字元停止讀取字元串。 此字元可能是終止的 Null 字元。 針對 strtol
、strtoul
、_strtoi64
和 _strtoui64
,此終止字元也可以是第一個大於或等於使用者所提供數字基底的數值字元。
如果使用者提供的轉換結束字元指標未設定為 NULL
或 nullptr
呼叫時,停止掃描的字元指標將會改為儲存在該處。 如果無法執行任何轉換 (找不到任何有效的數字或指定無效的基底),則字串指標的值會儲存在該位址。
strtod
需要格式如下的字串︰
[] [whitespace
] [digits
] [.
digits
] [{d
e
| E
D
| | }[sign
]]digits
sign
whitespace
可能包含忽略的空格或製表符;sign
是加號(+
)或減號,-
而且digits
是一或多個十進位數。 如果基底字元前沒有任何數字,則在基底字元後至少必須要有一個數字。 小數位數的後面會接著包含簡介字母 (d
、D
、e
或 E
) 的指數以及選擇性的帶正負號整數。 如果沒有出現指數部分或基數位元,則會假設基數位元會遵循字串中的最後一個數位。 不符合此表單的第一個字元會停止掃描。
strtol
、strtoul
、_strtoi64
和 _strtoui64
函式預期會有下列形式的字串︰
[] [whitespace
{+
| -
}] [0
[{ x
| X
}]] [digits
]
如果基底自變數介於 2 到 36 之間,則會用來做為數位的基底。 如果是 0,則會使用轉換結束指標所參考的初始字元來判斷基底。 如果第一個字元是 0,而第二個字元不是 『x』 或 『X』,字串會解譯為八進位整數;否則,它會解譯為十進位數。 如果第一個字元為 '0',而第二個字元是 'x' 或 X',則字串會解譯為十六進位整數。 如果第一個字元為 '1' 到 '9',則字串會解譯為十進位整數。 字母 'a' 到 'z' (或 'A' 到 'Z') 被指派值 10 到 35,只允許指派值小於 base
的字母。 strtoul
和 _strtoui64
允許加號 (+
) 或減號 (-
) 符號前置詞,前置減號表示傳回值為負數。
輸出值會受到設定地區設定之 LC_NUMERIC
類別設定的影響。 如需詳細資訊,請參閱setlocale
。 這些沒有 _l
後置字元的函式版本,會針對此與地區設定相關的行為使用目前的地區設定;具有 _l
後置字元的版本也一樣,只不過它們會改用傳遞的地區設定參數。
當這些函式傳回的值會造成溢位或下溢時,或無法轉換時,會傳回特殊案例值,如下所示:
函式 | Condition | 傳回的值 |
---|---|---|
strtod |
Overflow | +/- HUGE_VAL |
strtod |
反向溢位或未轉換 | 0 |
strtol |
+ 溢位 | LONG_MAX |
strtol |
- 溢位 | LONG_MIN |
strtol |
反向溢位或未轉換 | 0 |
_strtoi64 |
+ 溢位 | _I64_MAX |
_strtoi64 |
- 溢位 | _I64_MIN |
_strtoi64 |
未轉換 | 0 |
_strtoui64 |
Overflow | _UI64_MAX |
_strtoui64 |
未轉換 | 0 |
_I64_MAX
、 _I64_MIN
和 _UI64_MAX
定義於 中 <LIMITS.H>
。
wcstod
、wcstol
、wcstoul
、_wcstoi64
和 _wcstoui64
分別是寬字元版本的 strtod
、strtol
、strtoul
、_strtoi64
和 _strtoui64
;所有這些寬字元函式之轉換結束引數的指標是寬字元字串。 否則,所有這些寬字元函式與其單一位元組字元對應項目的行為完全相同。