strtol()函數 字符串轉換成 十進制 、十六進制 、二進制、 八進制 long類型

strtol()函數

頭文件:#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 傳回;
  3. endptr = NULL,則表示該參數無效,或不使用該參數。

【返回值】返回轉換後的長整型數;

  1. 如果不能轉換或者 str 爲空字符串,那麼返回 0(0L)
  2. 如果轉換得到的值超出 long int 所能表示的範圍,函數將返回 LONG_MAXLONG_MIN(在 limits.h 頭文件中定義),並將 errno 的值設置爲 ERANGE

示例代碼:

#include <iostream>
#include <string>

int main() {
	
	char szNumbers[] = "2001 60c0c0 -1101110100110100100000 0x6fffff";
	char * pEnd;
	long int li1, li2, li3, li4;
	li1 = strtol(szNumbers, &pEnd, 10);	//用十進制   解析2001
	li2 = strtol(pEnd, &pEnd, 16);		//用十六進制 解析60c0c0
	li3 = strtol(pEnd, &pEnd, 2);		//用二進制   解析-1101110100110100100000
	li4 = strtol(pEnd, NULL, 0);		//自動判斷   解析0x6fffff
	
	printf("轉換成10進制: %ld、%ld、%ld、%ld\n", li1, li2, li3, li4);	//轉換成10進制: 2001、6340800、-3624224、7340031

	return 0;
}

溫馨提示:ANSI C 規範定義了 stof()、atoi()、atol()、strtod()、strtol()、strtoul() 共6個可以將字符串轉換爲數字的函數,大家可以對比學習。另外在 C99 / C++11 規範中又新增了5個函數,分別是 atoll()、strtof()、strtold()、strtoll()、strtoull(),後續再做測試。

發佈了33 篇原創文章 · 獲贊 22 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章