字串轉換為數值函式

備註

系列中的每個 strto* 函式會將以 Null 結尾的字串轉換成數值。 下表列出可用的函式。

函式 描述
strtod 將字串轉換為雙精確度浮點值
strtol 將字串轉換為 long 整數
strtoul 將字串轉換為 unsigned long 整數
_strtoi64 將字串轉換為 64 位元 __int64 整數
_strtoui64 將字串轉換為不帶正負號的 64 位元 __int64 整數

wcstodwcstolwcstoul_wcstoi64 分別是寬字元版本的 strtodstrtolstrtoul_strtoi64。 所有這些寬字元函式的字串引數都是寬字元字串;否則,每個函式與其單一位元組字元對應項目的行為完全相同。

strtod 式接受兩個引數:第一個是輸入字串,第二個是結束轉換程式的字元指標。 strtolstrtoul_strtoi64_strtoui64 會採用第三個引數做為轉換程式中使用的數位基底。

輸入字串是一串字元,可解譯為所指定類型的數值。 每個函式都會在無法辨識為數字一部分的第一個字元停止讀取字串。 此字元可能是終止的 Null 字元。 針對 strtolstrtoul_strtoi64_strtoui64,此終止字元也可以是第一個大於或等於使用者所提供數字基底的數值字元。

如果使用者提供的轉換結束字元指標未設定為 NULLnullptr 呼叫時,停止掃描的字元指標將會改為儲存在該處。 如果無法執行任何轉換 (找不到任何有效的數字或指定無效的基底),則字串指標的值會儲存在該位址。

strtod 需要格式如下的字串︰

[whitespace] [sign] [digits] [.digits] [{d | D | e | E}[sign]digits]

whitespace可能包含忽略的空格或定位字元; sign 是加號( + )或減號, - 而且 digits 是一或多個十進位數。 如果基底字元前沒有任何數字,則在基底字元後至少必須要有一個數字。 小數位數的後面會接著包含簡介字母 (dDeE) 的指數以及選擇性的帶正負號整數。 如果沒有出現指數部分或基數位符,則會假設基數位符會遵循字串中的最後一個數位。 不符合此表單的第一個字元會停止掃描。

strtolstrtoul_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>

wcstodwcstolwcstoul_wcstoi64_wcstoui64 分別是寬字元版本的 strtodstrtolstrtoul_strtoi64_strtoui64;所有這些寬字元函式之轉換結束引數的指標是寬字元字串。 否則,所有這些寬字元函式與其單一位元組字元對應項目的行為完全相同。

另請參閱

資料轉換
地區設定
多位元組字元序列的解譯
數學和浮點支援
atof, _atof_l, _wtof, _wtof_l