a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > 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 進制轉換。

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

圖片精選

主站蜘蛛池模板: 久久亚洲精品国产一区最新章节 | 啪一啪av | 国产精品免费在线 | 中文字幕亚洲自拍 | 精品av| 一二三区字幕免费观看av | 欧美精品一区二区三区在线四季 | 国产拍拍拍拍拍拍拍拍拍拍拍拍拍 | 在线看一区二区 | 伊人在线 | 你懂的在线视频播放 | 亚洲精品久久久久久久久久久久久 | 久久国产精品99国产 | 国产精品二区一区二区aⅴ污介绍 | 久久午夜精品 | 国产欧美日韩在线 | 色综合免费| 欧美成人免费 | 国产噜噜噜噜噜久久久久久久久 | 国产精品久久久久蜜臀 | 精品久久久久久 | 91福利网站在线观看 | 一级黄色影视 | 亚洲午夜精品 | 日韩精品一区二区三区在线播放 | 免费一区二区三区视频在线 | 精品九九 | 成人亚洲精品久久久久软件 | 久久久国产视频 | 国产精品视频免费播放 | 日韩永久精品 | 韩国久久精品 | 国产精品8888 | 亚洲激情 欧美 | 国产精品a久久久久 | 亚洲一区播放 | 91婷婷射 | 日本久久久久久久久久 | 日韩中文字幕a | 黄色免费网站视频 | 天天澡天天狠天天天做 |