程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 淺析C說話中strtol()函數與strtoul()函數的用法

淺析C說話中strtol()函數與strtoul()函數的用法

編輯:關於C++

淺析C說話中strtol()函數與strtoul()函數的用法。本站提示廣大學習愛好者:(淺析C說話中strtol()函數與strtoul()函數的用法)文章只能為提供參考,不一定能成為您想要的結果。以下是淺析C說話中strtol()函數與strtoul()函數的用法正文


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,則表現該參數有效,或不應用該參數。
  3. 【前往值】前往轉換後的長整型數;假如不克不及轉換或許 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 參數。
    3. 【前往值】前往轉換後的無符號長整型數;假如不克不及轉換或許 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: 017cyuyan
      Value entered: 15.
      

      因為 base 參數被設置為 0 而且字符串“017cyuyan”以“0”開首,所以采取 8 進制轉換。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved