strtol及數制轉換

2021-09-08 03:30:03 字數 1250 閱讀 3521

函式及其引數

long int strtol(const char *nptr,char **endptr,int base);

編輯本段

函式的解釋說明

這個函式會將引數nptr字串根據引數base來轉換成長整型數。引數base範圍從2至36,或0。參

數base代表採的進製方式,如base值為10則採用10進製,若base值為16則採用16進製制等。當base值為

0時則是採用10進製做轉換,但遇到如』0x』前置字元則會使用16進製做轉換、遇到』0』前置字元而

不是』0x』的時候會使用8進製做轉換。一開始strtol()會掃瞄引數nptr字串,跳過前面的空格字

符,直到遇上數字或正負符號才開始做轉換,再遇到非數字或字串結束時('\0')結束轉換,並將結

果返回。若引數endptr不為null,則會將遇到不合條件而終止的nptr中的字元指標由endptr返回;若

引數endptr為null,則會不返回非法字串。

編輯本段

strtol是atoi的增強版

主要體現在這幾方面:

1.不僅可以識別十進位制整數,還可以識別其它進製的整數,取決於base引數,比如strtol

("0xdeadbee~~", null, 16)返回0xdeadbee的值,strtol("0777~~", null, 8)返回0777的值。

2.endptr是乙個傳出引數,函式返回時指向後面未被識別的第乙個字元。例如char *pos;

strtol("123abc", &pos, 10);,strtol返回123,pos指向字串中的字母a。如果字串開頭沒有可

識別的整數,例如char *pos; strtol("abcabc", &pos, 10);,則strtol返回0,pos指向字串開頭

,可以據此判斷這種出錯的情況,而這是atoi處理不了的。

3.如果字串中的整數值超出long int的表示範圍(上溢或下溢),則strtol返回它所能表示的

最大(或最小)整數,並設定errno為erange,例如strtol("0xdeadbeef~~", null, 16)返回

0x7fffffff並設定errno為erange

//進製轉換a到b,注意需要全用字串

void fun(int a,int b,int temp)

//倒置存放,共i位

for(j=0;jtemp[j]=temp[i-j-1];

}int fun(int num,int a)//轉為十進位制

數制及進製轉換

數制 也稱為 計數制 是用一組固定的符號和統一的規則來表示數值的方法。任何乙個數制都包含兩個基本要素 基數和位權。基本概念 數碼 數制中表示基本數值大小的不同數字符號。例如 十進位制中有10個數碼 0 1 2 3 4 5 6 7 8 9 基數 數制中所使用數碼的個數。例如 十進位制使用的數碼個數為 ...

shell 數制轉換

shell 指令碼預設數值是由10 進製數處理,除非這個數字某種特殊的標記法或字首開頭.才可以表示其它進製型別數值。如 以 0 開頭就是 8 進製.以0x 開頭就是16 進製數.使用 base number 這種形式可以表示其它進製.base值 2 64.使用方法 八進位制轉十進位制 charles...

數制的轉換

鏈棧實現數制的轉換 include using namespace std define ok 1 define error 0 define overflow 2 typedef int status define e 8 typedef struct snodesnode,linkstack s...