strtol()函數
頭文件:#include <stdlib.h>
strtol()
函數用來將字符串轉換爲長整型數(long),其原型爲:
long int strtol (const char* str, char** endptr, int base);
【參數說明】str
爲要轉換的字符串,endstr
爲第一個不能轉換的字符的指針,base
爲字符串 str
所採用的進制。
【函數說明】strtol()
會將參數 str
字符串根據參數 base
來轉換成長整型數(long)
。
參數 base
範圍從2 至36,或0。
參數base
代表 str 採用的進制方式,如 base=10
則採用10 進制,若base=16
則採用16 進制等。
strtol()
會掃描參數 str 字符串,跳過前面的空白字符(例如空格,tab縮進等,可以通過 isspace() 函數來檢測),直到遇上數字或正負符號纔開始做轉換,再遇到非數字或字符串結束時(’\0’)結束轉換,並將結果返回。
兩點注意:
- 當
base= 0
時,默認採用 10 進制轉換,但如果遇到'0x' / '0X'
前置字符則會使用 16 進制轉換,遇到'0'
前置字符則會使用 8 進制轉換。 - 若
endptr !=NULL
,則會將遇到的不符合條件而終止的字符指針由 endptr 傳回; - 若
endptr = NULL
,則表示該參數無效,或不使用該參數。
【返回值】返回轉換後的長整型數;
- 如果不能轉換或者
str
爲空字符串,那麼返回0(0L)
; - 如果轉換得到的值超出
long int
所能表示的範圍,函數將返回LONG_MAX
或LONG_MIN
(在 limits.h 頭文件中定義),並將errno
的值設置爲ERANGE
。
示例代碼:
#include <iostream>
#include <string>
int main() {
char szNumbers[] = "2001 60c0c0 -1101110100110100100000 0x6fffff";
char * pEnd;
long int li1, li2, li3, li4;
li1 = strtol(szNumbers, &pEnd, 10); //用十進制 解析2001
li2 = strtol(pEnd, &pEnd, 16); //用十六進制 解析60c0c0
li3 = strtol(pEnd, &pEnd, 2); //用二進制 解析-1101110100110100100000
li4 = strtol(pEnd, NULL, 0); //自動判斷 解析0x6fffff
printf("轉換成10進制: %ld、%ld、%ld、%ld\n", li1, li2, li3, li4); //轉換成10進制: 2001、6340800、-3624224、7340031
return 0;
}
溫馨提示:ANSI C 規範定義了 stof()、atoi()、atol()、strtod()、strtol()、strtoul()
共6個可以將字符串轉換爲數字的函數,大家可以對比學習。另外在 C99 / C++11 規範中又新增了5個函數,分別是 atoll()、strtof()、strtold()、strtoll()、strtoull()
,後續再做測試。