翻了翻舊**,發現以前對strtol這個函式不太了解,特此分析一下。
c 庫函式strtol原型為:
long int strtol(const char *str, char **endptr, int base);
其執行過程為:
把引數str所指向的字串根據給定的base轉換為乙個長整數(型別為 long int 型),並將該長整數轉換為十進位制數返回,如果沒有符合的結果,則返回乙個0值;
base 必須介於 2 和 36(包含)之間,或者是特殊值 0;
str中不符合base的部分儲存於*endptr中。
我們來看一下例項:
#include using namespace std;
int main()
輸出結果為:
初始字串為:112233abc11
符合的結果並轉換為十進位制數result: 3 , 餘下的字串endptr: 2233abc11
即符合base為2條件的只有0和1,所以通過函式我們得到11,函式將11轉為十進位制數得到3返回給result,餘下的字串儲存到endptr中,其它情況依此類推。
base的篩選條件(抄錄自
zxx2096的部落格:strtol()詳解):
當base為2時,合法字元為『0』,『1』;
base為8時,合法字元為『0』,『1』,……『7』;
base為10時,合法字元為『0』,『1』,……『9』;
base 為16時,合法字元為『0』,『1』,……『9』,『a』,……『f』;
base為24時,合法字元為『0』,……『9』,『a』,……『n』,
base為36時,合法字元為『0』,……『9』,『a』,……『z』;等等。
其中,不區分大小寫,比如,『a』和『a』會都會被轉化為10。
到此,應該對該函式的使用較為清晰了吧。
strtol函式詳解
long int strtol const char nptr,char endptr,int base 這個函式會將引數nptr字串根據引數base來轉換成長整型數。引數base範圍從2至36,或0。引數base代表採用的進製方式,如base值為10則採用10進製,若base值為16則採用16進製...
strtol函式引數詳解
long int strtol const char nptr,char endptr,int base 為什麼第二個引數不用初始化只用定義乙個未初始化的char 型別的指標即可?strtol是atoi的增強版,引數base範圍從2至36,或0。引數base代表採用的進製方式,0 10是十進位制 1...
strtol函式用法
之前想用c寫md5函式用法,中間設計大量進製轉換的內容,於是就查到了strtol這個函式 但是發現之前對其認識上有一些偏頗,所以把它的用法記錄下來 strtol是乙個c語言函式,作用就是將乙個字串轉換為長整型long,其函式原型為 long int strtol const char str,cha...