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


閱讀排行
- 1C語(yǔ)言 while語(yǔ)句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹的示例代碼(圣誕
- 3利用C語(yǔ)言實(shí)現(xiàn)“百馬百擔(dān)”問(wèn)題方法
- 4C語(yǔ)言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語(yǔ)言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語(yǔ)言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 04-02c語(yǔ)言函數(shù)調(diào)用后清空內(nèi)存 c語(yǔ)言調(diào)用
- 04-02func函數(shù)+在C語(yǔ)言 func函數(shù)在c語(yǔ)言中
- 04-02c語(yǔ)言的正則匹配函數(shù) c語(yǔ)言正則表達(dá)
- 04-02c語(yǔ)言用函數(shù)寫分段 用c語(yǔ)言表示分段
- 04-02c語(yǔ)言中對(duì)數(shù)函數(shù)的表達(dá)式 c語(yǔ)言中對(duì)
- 04-02c語(yǔ)言編寫函數(shù)冒泡排序 c語(yǔ)言冒泡排
- 04-02c語(yǔ)言沒有round函數(shù) round c語(yǔ)言
- 04-02c語(yǔ)言分段函數(shù)怎么求 用c語(yǔ)言求分段
- 04-02C語(yǔ)言中怎么打出三角函數(shù) c語(yǔ)言中怎
- 04-02c語(yǔ)言調(diào)用函數(shù)求fibo C語(yǔ)言調(diào)用函數(shù)求
隨機(jī)閱讀
- 04-02jquery與jsp,用jquery
- 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載
- 01-10delphi制作wav文件的方法
- 01-10使用C語(yǔ)言求解撲克牌的順子及n個(gè)骰子
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-10C#中split用法實(shí)例總結(jié)
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置