欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺析C語言中strtol()函數(shù)與strtoul()函數(shù)的用法

 更新時(shí)間:2015年08月24日 15:11:01   投稿:goldensun  
這篇文章主要介紹了淺析C語言中strtol()函數(shù)與strtoul()函數(shù)的用法,注意其將字符串轉(zhuǎn)換成long型的區(qū)別,需要的朋友可以參考下

C語言strtol()函數(shù):將字符串轉(zhuǎn)換成long(長(zhǎng)整型數(shù))
頭文件:

#include <stdlib.h>

strtol() 函數(shù)用來將字符串轉(zhuǎn)換為長(zhǎng)整型數(shù)(long),其原型為:

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

【參數(shù)說明】str 為要轉(zhuǎn)換的字符串,endstr 為第一個(gè)不能轉(zhuǎn)換的字符的指針,base 為字符串 str 所采用的進(jìn)制。

【函數(shù)說明】strtol() 會(huì)將參數(shù) str 字符串根據(jù)參數(shù) base 來轉(zhuǎn)換成長(zhǎng)整型數(shù)(long)。參數(shù) base 范圍從2 至36,或0。參數(shù)base 代表 str 采用的進(jìn)制方式,如base 值為10 則采用10 進(jìn)制,若base 值為16 則采用16 進(jìn)制等。

strtol() 會(huì)掃描參數(shù) str 字符串,跳過前面的空白字符(例如空格,tab縮進(jìn)等,可以通過 isspace() 函數(shù)來檢測(cè)),直到遇上數(shù)字或正負(fù)符號(hào)才開始做轉(zhuǎn)換,再遇到非數(shù)字或字符串結(jié)束時(shí)('\0')結(jié)束轉(zhuǎn)換,并將結(jié)果返回。

兩點(diǎn)注意:

  1. 當(dāng) base 的值為 0 時(shí),默認(rèn)采用 10 進(jìn)制轉(zhuǎn)換,但如果遇到 '0x' / '0X' 前置字符則會(huì)使用 16 進(jìn)制轉(zhuǎn)換,遇到 '0' 前置字符則會(huì)使用 8 進(jìn)制轉(zhuǎn)換。
  2. 若endptr 不為NULL,則會(huì)將遇到的不符合條件而終止的字符指針由 endptr 傳回;若 endptr 為 NULL,則表示該參數(shù)無效,或不使用該參數(shù)。

【返回值】返回轉(zhuǎn)換后的長(zhǎng)整型數(shù);如果不能轉(zhuǎn)換或者 str 為空字符串,那么返回 0(0L);如果轉(zhuǎn)換得到的值超出 long int 所能表示的范圍,函數(shù)將返回 LONG_MAX 或 LONG_MIN(在 limits.h 頭文件中定義),并將 errno 的值設(shè)置為 ERANGE。

【示例】將字符串轉(zhuǎn)換成10進(jìn)制。

#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 ("轉(zhuǎn)換成10進(jìn)制: %ld、%ld、%ld、%ld\n", li1, li2, li3, li4);
  system("pause");
  return 0;
}

執(zhí)行結(jié)果:
轉(zhuǎn)換成10進(jìn)制:

2001、6340800、-3624224、7340031

C語言strtoul()函數(shù):將字符串轉(zhuǎn)換成unsigned long(無符號(hào)長(zhǎng)整型數(shù))
頭文件:

#include <stdlib.h>

strtoul() 函數(shù)源自于“string to unsigned long”,用來將字符串轉(zhuǎn)換成無符號(hào)長(zhǎng)整型數(shù)(unsigned long),其原型為:

  unsigned long strtoul (const char* str, char** endptr, int base);

【參數(shù)說明】str 為要轉(zhuǎn)換的字符串,endstr 為第一個(gè)不能轉(zhuǎn)換的字符的指針,base 為字符串 str 所采用的進(jìn)制。

【函數(shù)說明】strtoul() 會(huì)將參數(shù) str 字符串根據(jù)參數(shù) base 來轉(zhuǎn)換成無符號(hào)的長(zhǎng)整型數(shù)(unsigned long)。參數(shù) base 范圍從2 至36,或0。參數(shù) base 代表 str 采用的進(jìn)制方式,如 base 值為10 則采用10 進(jìn)制,若 base 值為16 則采用16 進(jìn)制數(shù)等。

strtoul() 會(huì)掃描參數(shù) str 字符串,跳過前面的空白字符(例如空格,tab縮進(jìn)等,可以通過 isspace() 函數(shù)來檢測(cè)),直到遇上數(shù)字或正負(fù)符號(hào)才開始做轉(zhuǎn)換,再遇到非數(shù)字或字符串結(jié)束時(shí)('\0')結(jié)束轉(zhuǎn)換,并將結(jié)果返回。

兩點(diǎn)注意:

  1. 當(dāng) base 的值為 0 時(shí),默認(rèn)采用 10 進(jìn)制轉(zhuǎn)換,但如果遇到 '0x' / '0X' 前置字符則會(huì)使用 16 進(jìn)制轉(zhuǎn)換,遇到 '0' 前置字符則會(huì)使用 8 進(jìn)制轉(zhuǎn)換。
  2. 若 endptr 不為NULL,則會(huì)將遇到的不符合條件而終止的字符指針由 endptr 傳回;若 endptr 為 NULL,則表示該參數(shù)無效,或不使用該參數(shù)。本文最后的范例沒有展示 endptr 參數(shù)的使用,你可以參考 strtol() 函數(shù)的范例來更加直觀地了解 endptr 參數(shù)。

【返回值】返回轉(zhuǎn)換后的無符號(hào)長(zhǎng)整型數(shù);如果不能轉(zhuǎn)換或者 str 為空字符串,那么返回 0;如果轉(zhuǎn)換得到的值超出unsigned long int 所能表示的范圍,函數(shù)將返回 ULONG_MAX(在 limits.h 頭文件中定義),并將 errno 的值設(shè)置為 ERANGE。

溫馨提示:ANSI C 規(guī)范定義了 stof()、atoi()、atol()、strtod()、strtol()、strtoul() 共6個(gè)可以將字符串轉(zhuǎn)換為數(shù)字的函數(shù),大家可以對(duì)比學(xué)習(xí)。另外在 C99 / C++11 規(guī)范中又新增了5個(gè)函數(shù),分別是 atoll()、strtof()、strtold()、strtoll()、strtoull(),在此不做介紹,請(qǐng)大家自行學(xué)習(xí)。

范例:將輸入的字符串轉(zhuǎn)換為無符號(hào)長(zhǎng)整型。

#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;
}

運(yùn)行結(jié)果:

Enter an unsigned number: 017cyuyan
Value entered: 15.

由于 base 參數(shù)被設(shè)置為 0 并且字符串“017cyuyan”以“0”開頭,所以采用 8 進(jìn)制轉(zhuǎn)換。

相關(guān)文章

  • C++深入淺出講解隱藏this指針的用法

    C++深入淺出講解隱藏this指針的用法

    在C++中,每一個(gè)對(duì)象都能通過this指針來訪問自己的地址。this?指針是所有成員函數(shù)的隱含參數(shù)。因此,在成員函數(shù)內(nèi)部,它可以用來指向調(diào)用對(duì)象
    2022-05-05
  • C++?opencv圖像平滑濾波器使用示例

    C++?opencv圖像平滑濾波器使用示例

    這篇文章主要為大家介紹了C++?opencv數(shù)字圖像處理圖像平滑濾波器的使用示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • C++實(shí)現(xiàn)棧與分析棧的知識(shí)點(diǎn)

    C++實(shí)現(xiàn)棧與分析棧的知識(shí)點(diǎn)

    這篇文章主要介紹了C++實(shí)現(xiàn)棧與分析棧的知識(shí)點(diǎn),棧(stack)是計(jì)算機(jī)中常用的一種線性數(shù)據(jù)結(jié)構(gòu),經(jīng)常有資料使用“操作受限”來形容棧,因?yàn)樗膲喝霔:蛷棾鰲2僮髦荒茉跅m斶M(jìn)行,下文更多相關(guān)資料,需要的小伙伴可以參考一下
    2022-03-03
  • Visual Studio 2019創(chuàng)建C++ Hello World項(xiàng)目的方法

    Visual Studio 2019創(chuàng)建C++ Hello World項(xiàng)目的方法

    這篇文章主要介紹了Visual Studio 2019創(chuàng)建C++ Hello World項(xiàng)目的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • C++ Boost命令行解析庫的應(yīng)用詳解

    C++ Boost命令行解析庫的應(yīng)用詳解

    命令行解析庫是一種用于簡(jiǎn)化處理命令行參數(shù)的工具,它可以幫助開發(fā)者更方便地解析命令行參數(shù)并提供適當(dāng)?shù)膸椭畔?本文主要介紹了不同的命令行解析庫和它們?cè)贑++項(xiàng)目中的應(yīng)用,希望對(duì)大家有所幫助
    2023-11-11
  • C語言實(shí)現(xiàn)BMP圖像處理(彩色圖轉(zhuǎn)灰度圖)

    C語言實(shí)現(xiàn)BMP圖像處理(彩色圖轉(zhuǎn)灰度圖)

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)BMP圖像處理,彩色圖轉(zhuǎn)灰度圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • 基于MFC實(shí)現(xiàn)類的序列化詳解

    基于MFC實(shí)現(xiàn)類的序列化詳解

    序列化是將程序中的對(duì)象以一種二進(jìn)制格式存儲(chǔ)到存儲(chǔ)設(shè)備中(例如文本/數(shù)據(jù)庫等),以實(shí)現(xiàn)“永生”或隨意“流動(dòng)”。本文將為大家詳細(xì)講講如何基于MFC實(shí)現(xiàn)類的序列化,需要的可以參考一下
    2022-07-07
  • C語言實(shí)現(xiàn)循環(huán)鏈表

    C語言實(shí)現(xiàn)循環(huán)鏈表

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)循環(huán)鏈表,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • C++詳細(xì)講解內(nèi)存管理工具primitives

    C++詳細(xì)講解內(nèi)存管理工具primitives

    文章向大家介紹C++內(nèi)存管理primitives,主要包括primitives使用實(shí)例、應(yīng)用技巧、基本知識(shí)點(diǎn)總結(jié)和需要注意事項(xiàng),具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-06-06
  • C++類成員函數(shù)后面加const問題

    C++類成員函數(shù)后面加const問題

    這篇文章主要介紹了C++類成員函數(shù)后面加const問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11

最新評(píng)論