国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C > 正文

淺析C語言中strtol()函數與strtoul()函數的用法

2020-01-26 14:57:51
字體:
來源:轉載
供稿:網友

C語言strtol()函數:將字符串轉換成long(長整型數)
頭文件:

#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')結束轉換,并將結果返回。

兩點注意:

  1. 當 base 的值為 0 時,默認采用 10 進制轉換,但如果遇到 '0x' / '0X' 前置字符則會使用 16 進制轉換,遇到 '0' 前置字符則會使用 8 進制轉換。
  2. 若endptr 不為NULL,則會將遇到的不符合條件而終止的字符指針由 endptr 傳回;若 endptr 為 NULL,則表示該參數無效,或不使用該參數。

【返回值】返回轉換后的長整型數;如果不能轉換或者 str 為空字符串,那么返回 0(0L);如果轉換得到的值超出 long int 所能表示的范圍,函數將返回 LONG_MAX 或 LONG_MIN(在 limits.h 頭文件中定義),并將 errno 的值設置為 ERANGE。

【示例】將字符串轉換成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 ("轉換成10進制: %ld、%ld、%ld、%ld/n", li1, li2, li3, li4);  system("pause");  return 0;}

執行結果:
轉換成10進制:

2001、6340800、-3624224、7340031

C語言strtoul()函數:將字符串轉換成unsigned long(無符號長整型數)
頭文件:

#include <stdlib.h>

strtoul() 函數源自于“string to unsigned long”,用來將字符串轉換成無符號長整型數(unsigned long),其原型為:

  unsigned long strtoul (const char* str, char** endptr, int base);

【參數說明】str 為要轉換的字符串,endstr 為第一個不能轉換的字符的指針,base 為字符串 str 所采用的進制。

【函數說明】strtoul() 會將參數 str 字符串根據參數 base 來轉換成無符號的長整型數(unsigned long)。參數 base 范圍從2 至36,或0。參數 base 代表 str 采用的進制方式,如 base 值為10 則采用10 進制,若 base 值為16 則采用16 進制數等。

strtoul() 會掃描參數 str 字符串,跳過前面的空白字符(例如空格,tab縮進等,可以通過 isspace() 函數來檢測),直到遇上數字或正負符號才開始做轉換,再遇到非數字或字符串結束時('/0')結束轉換,并將結果返回。

兩點注意:

  1. 當 base 的值為 0 時,默認采用 10 進制轉換,但如果遇到 '0x' / '0X' 前置字符則會使用 16 進制轉換,遇到 '0' 前置字符則會使用 8 進制轉換。
  2. 若 endptr 不為NULL,則會將遇到的不符合條件而終止的字符指針由 endptr 傳回;若 endptr 為 NULL,則表示該參數無效,或不使用該參數。本文最后的范例沒有展示 endptr 參數的使用,你可以參考 strtol() 函數的范例來更加直觀地了解 endptr 參數。

【返回值】返回轉換后的無符號長整型數;如果不能轉換或者 str 為空字符串,那么返回 0;如果轉換得到的值超出unsigned long int 所能表示的范圍,函數將返回 ULONG_MAX(在 limits.h 頭文件中定義),并將 errno 的值設置為 ERANGE。

溫馨提示:ANSI C 規范定義了 stof()、atoi()、atol()、strtod()、strtol()、strtoul() 共6個可以將字符串轉換為數字的函數,大家可以對比學習。另外在 C99 / C++11 規范中又新增了5個函數,分別是 atoll()、strtof()、strtold()、strtoll()、strtoull(),在此不做介紹,請大家自行學習。

范例:將輸入的字符串轉換為無符號長整型。

#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;}

運行結果:

Enter an unsigned number: 017cyuyanValue entered: 15.

由于 base 參數被設置為 0 并且字符串“017cyuyan”以“0”開頭,所以采用 8 進制轉換。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 西乌| 泾源县| 饶阳县| 清流县| 横峰县| 竹溪县| 灵寿县| 积石山| 永顺县| 朔州市| 渝中区| 惠东县| 日喀则市| 上蔡县| 连南| 沧州市| 玉山县| 萨嘎县| 汝阳县| 合肥市| 承德市| 武安市| 泉州市| 沁源县| 庄浪县| 晋宁县| 兖州市| 大竹县| 信丰县| 东平县| 潜山县| 鄱阳县| 长治市| 方山县| 师宗县| 东乡族自治县| 霍林郭勒市| 揭阳市| 祥云县| 永福县| 哈密市|