淺析C語言中strtol()函數(shù)與strtoul()函數(shù)的用法
C語言strtol()函數(shù):將字符串轉(zhuǎn)換成long(長整型數(shù))
頭文件:
#include <stdlib.h>
strtol() 函數(shù)用來將字符串轉(zhuǎn)換為長整型數(shù)(long),其原型為:
long int strtol (const char* str, char** endptr, int base);
【參數(shù)說明】str 為要轉(zhuǎn)換的字符串,endstr 為第一個不能轉(zhuǎn)換的字符的指針,base 為字符串 str 所采用的進制。
【函數(shù)說明】strtol() 會將參數(shù) str 字符串根據(jù)參數(shù) base 來轉(zhuǎn)換成長整型數(shù)(long)。參數(shù) base 范圍從2 至36,或0。參數(shù)base 代表 str 采用的進制方式,如base 值為10 則采用10 進制,若base 值為16 則采用16 進制等。
strtol() 會掃描參數(shù) str 字符串,跳過前面的空白字符(例如空格,tab縮進等,可以通過 isspace() 函數(shù)來檢測),直到遇上數(shù)字或正負符號才開始做轉(zhuǎn)換,再遇到非數(shù)字或字符串結(jié)束時('\0')結(jié)束轉(zhuǎn)換,并將結(jié)果返回。
兩點注意:
- 當 base 的值為 0 時,默認采用 10 進制轉(zhuǎn)換,但如果遇到 '0x' / '0X' 前置字符則會使用 16 進制轉(zhuǎn)換,遇到 '0' 前置字符則會使用 8 進制轉(zhuǎn)換。
- 若endptr 不為NULL,則會將遇到的不符合條件而終止的字符指針由 endptr 傳回;若 endptr 為 NULL,則表示該參數(shù)無效,或不使用該參數(shù)。
【返回值】返回轉(zhuǎn)換后的長整型數(shù);如果不能轉(zhuǎn)換或者 str 為空字符串,那么返回 0(0L);如果轉(zhuǎn)換得到的值超出 long int 所能表示的范圍,函數(shù)將返回 LONG_MAX 或 LONG_MIN(在 limits.h 頭文件中定義),并將 errno 的值設置為 ERANGE。
【示例】將字符串轉(zhuǎn)換成10進制。
#include <stdio.h>
#include <stdlib.h>
int main ()
{
char szNumbers[] = "2001 60c0c0 -1101110100110100100000 0x6fffff";
char * pEnd;
long int li1, li2, li3, li4;
li1 = strtol (szNumbers,&pEnd,10);
li2 = strtol (pEnd,&pEnd,16);
li3 = strtol (pEnd,&pEnd,2);
li4 = strtol (pEnd,NULL,0);
printf ("轉(zhuǎn)換成10進制: %ld、%ld、%ld、%ld\n", li1, li2, li3, li4);
system("pause");
return 0;
}
執(zhí)行結(jié)果:
轉(zhuǎn)換成10進制:
2001、6340800、-3624224、7340031
C語言strtoul()函數(shù):將字符串轉(zhuǎn)換成unsigned long(無符號長整型數(shù))
頭文件:
#include <stdlib.h>
strtoul() 函數(shù)源自于“string to unsigned long”,用來將字符串轉(zhuǎn)換成無符號長整型數(shù)(unsigned long),其原型為:
unsigned long strtoul (const char* str, char** endptr, int base);
【參數(shù)說明】str 為要轉(zhuǎn)換的字符串,endstr 為第一個不能轉(zhuǎn)換的字符的指針,base 為字符串 str 所采用的進制。
【函數(shù)說明】strtoul() 會將參數(shù) str 字符串根據(jù)參數(shù) base 來轉(zhuǎn)換成無符號的長整型數(shù)(unsigned long)。參數(shù) base 范圍從2 至36,或0。參數(shù) base 代表 str 采用的進制方式,如 base 值為10 則采用10 進制,若 base 值為16 則采用16 進制數(shù)等。
strtoul() 會掃描參數(shù) str 字符串,跳過前面的空白字符(例如空格,tab縮進等,可以通過 isspace() 函數(shù)來檢測),直到遇上數(shù)字或正負符號才開始做轉(zhuǎn)換,再遇到非數(shù)字或字符串結(jié)束時('\0')結(jié)束轉(zhuǎn)換,并將結(jié)果返回。
兩點注意:
- 當 base 的值為 0 時,默認采用 10 進制轉(zhuǎn)換,但如果遇到 '0x' / '0X' 前置字符則會使用 16 進制轉(zhuǎn)換,遇到 '0' 前置字符則會使用 8 進制轉(zhuǎn)換。
- 若 endptr 不為NULL,則會將遇到的不符合條件而終止的字符指針由 endptr 傳回;若 endptr 為 NULL,則表示該參數(shù)無效,或不使用該參數(shù)。本文最后的范例沒有展示 endptr 參數(shù)的使用,你可以參考 strtol() 函數(shù)的范例來更加直觀地了解 endptr 參數(shù)。
【返回值】返回轉(zhuǎn)換后的無符號長整型數(shù);如果不能轉(zhuǎn)換或者 str 為空字符串,那么返回 0;如果轉(zhuǎn)換得到的值超出unsigned long int 所能表示的范圍,函數(shù)將返回 ULONG_MAX(在 limits.h 頭文件中定義),并將 errno 的值設置為 ERANGE。
溫馨提示:ANSI C 規(guī)范定義了 stof()、atoi()、atol()、strtod()、strtol()、strtoul() 共6個可以將字符串轉(zhuǎn)換為數(shù)字的函數(shù),大家可以對比學習。另外在 C99 / C++11 規(guī)范中又新增了5個函數(shù),分別是 atoll()、strtof()、strtold()、strtoll()、strtoull(),在此不做介紹,請大家自行學習。
范例:將輸入的字符串轉(zhuǎn)換為無符號長整型。
#include <stdio.h>
#include <stdlib.h>
int main ()
{
char buffer [256];
unsigned long ul;
printf ("Enter an unsigned number: ");
fgets (buffer, 256, stdin);
ul = strtoul (buffer, NULL, 0);
printf ("Value entered: %lu.\n", ul);
system("pause");
return 0;
}
運行結(jié)果:
Enter an unsigned number: 017cyuyan Value entered: 15.
由于 base 參數(shù)被設置為 0 并且字符串“017cyuyan”以“0”開頭,所以采用 8 進制轉(zhuǎn)換。
上一篇:詳解C語言中的char數(shù)據(jù)類型及其與int類型的轉(zhuǎn)換
欄 目:C語言
下一篇:使用C語言詳解霍夫曼樹數(shù)據(jù)結(jié)構(gòu)
本文標題:淺析C語言中strtol()函數(shù)與strtoul()函數(shù)的用法
本文地址:http://www.jygsgssxh.com/a1/Cyuyan/2874.html
您可能感興趣的文章
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用函數(shù)刪除字符
- 04-02c語言的正則匹配函數(shù) c語言正則表達式函數(shù)庫
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言中對數(shù)函數(shù)的表達式 c語言中對數(shù)怎么表達
- 04-02c語言用函數(shù)寫分段 用c語言表示分段函數(shù)
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排序法函數(shù)
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段函數(shù)
- 04-02C語言中怎么打出三角函數(shù) c語言中怎么打出三角函數(shù)的值
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求階乘


閱讀排行
本欄相關(guān)
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對數(shù)函數(shù)的表達式 c語言中對
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求
隨機閱讀
- 04-02jquery與jsp,用jquery
- 01-11ajax實現(xiàn)頁面的局部加載
- 01-10delphi制作wav文件的方法
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-10C#中split用法實例總結(jié)
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 01-10SublimeText編譯C開發(fā)環(huán)境設置


