一起來學習C語言的字符串轉換函數
字符串轉整數
字符串轉換為整數的函數有兩個,他們的函數原型如下:
int __cdecl atoi(const char *_Str); long __cdecl atol(const char *_Str);
這兩個函數的用法都很簡單,atoi函數將字符串轉換為整數int
型,atol函數將字符串轉換為長整形long int
型。如果轉換無效,返回值都為0,下面通過一個簡單的例子看一下這兩個函數的用法。
#include <stdio.h> #include <stdlib.h> int main(int argc, char** argv) { int val; long val_l; char str[20]; strcpy(str, "1234"); val = atoi(str); printf("字符串值 = %s, 整型值 = %d\n", str, val); strcpy(str, "abc"); val = atoi(str); printf("字符串值 = %s, 整型值 = %d\n", str, val); strcpy(str, "98993489"); val_l = atol(str); printf("\n字符串值 = %s, 長整型值 = %ld\n", str, val_l); strcpy(str, "abc123"); val_l = atol(str); printf("字符串值 = %s, 長整型值 = %ld\n", str, val_l); return 0; }
給字符串賦不同的值,然後使用,atoi函數和atol函數對字符串進行轉換,輸出結果如下:
通過結果可以看出,隻有當字符串有效時才能正確的轉換成整數,否則轉換的結果就為0。
將字符串轉換為整數的函數還有以下兩個:
long __cdecl strtol(const char * __restrict__ _Str,char ** __restrict__ _EndPtr,int _Radix); unsigned long __cdecl strtoul(const char * __restrict__ _Str,char ** __restrict__ _EndPtr,int _Radix);
strtol() 函數用來將字符串轉換為長整型數(long
),它有三個參數:
_Str
為要轉換的字符串,_EndPtr
為第一個不能轉換的字符的指針,_Radix
為字符串 str 所采用的進制。
trtol() 函數會將參數str
字符串根據參數base
來轉換成長整型數(long
)。參數base
范圍從2
至36
,或0
。參數base
代表str
采用的進制方式,如base
值為10
則采用10
進制,若base
值為16
則采用16
進制等。
下面通過一個簡單的例子演示一下strtol() 函數的用法。
#include <stdio.h> #include <stdlib.h> int main(int argc, char** argv) { char str[30] = "123 -456 abc"; char *pEnd; long ret1,ret2; ret1 = strtol(str, &pEnd, 10); ret2 = strtol(pEnd, &pEnd, 10); printf("數字1是: %ld\n", ret1); printf("數字2是: %ld\n", ret2); printf("字符串部分是: %s \n", pEnd); return 0; }
定義一個字符串,然後使用strtol() 函數轉換字符串中的數字,輸出結果如下:
通過打印的結果可以看出,strtol() 函數將字符串中的兩個數字都成功換成為整數瞭。
當strtol() 函數讀取字符串時,讀取到第一個空格是,由於空白字符不能轉換,所以函數返回,並將空白字符的存儲在 pEnd
中,接下來從空白位置繼續轉換,將字符串“-456”
轉換為數字之後,又遇到瞭空白字符,不能繼續轉換,函數退出,將第二個空白字符存儲在 pEnd
中,最後將剩餘的字符串換打印出來。
通過strtol() 函數就可以智能的將字符串的數字提取出來。
strtoul 函數用來將字符串轉換成無符號長整型數(unsigned long
),它的用法和strtol() 函數基本一樣。
修改上面的代碼如下:
#include <stdio.h> #include <stdlib.h> int main(int argc, char** argv) { char str[30] = "123 456 abc"; char *pEnd; long ret1,ret2; ret1 = strtoul(str, &pEnd, 10); ret2 = strtoul(pEnd, &pEnd, 10); printf("數字1是: %lu\n", ret1); printf("數字2是: %lu\n", ret2); printf("字符串部分是: %s \n", pEnd); return 0; }
輸出結果為:
如果在字符串的數字前面添加上負號,轉換的結果就會出錯。
在使用strtol() 函數和strtoul 函數時要註意兩點:
- 當
base
的值為0
時,默認采用10
進制轉換,但如果遇到'0x' / '0X'
前置字符則會使用16
進制轉換,遇到'0'
前置字符則會使用8
進制轉換。 - 若
endptr
不為NULL
,則會將遇到的不符合條件而終止的字符指針由endptr
傳回;若endptr
為NULL
,則表示該參數無效,或不使用該參數。
總結
本篇文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!