簡體   English   中英

將Const char *轉換為Unsigned long int-strtoul

[英]Converting Const char * to Unsigned long int - strtoul

我正在使用以下代碼將Const char *轉換為Unsigned long int ,但輸出始終為0 我在哪里做錯了? 請告訴我。

這是我的代碼:

#include <iostream>
#include <vector>
#include <stdlib.h>

using namespace std;

int main() 
{
    vector<string> tok;
    tok.push_back("2");
    const char *n = tok[0].c_str();
    unsigned long int nc;
    char *pEnd;
    nc=strtoul(n,&pEnd,1);
    //cout<<n<<endl;
    cout<<nc<<endl; // it must output 2 !?
    return 0;
}

使用以10為基數:

nc=strtoul(n,&pEnd,10);

或允許自動檢測鹼基:

nc=strtoul(n,&pEnd,0);

strtoul的第三個參數是要使用的基數,而您將其作為基數1。

您需要使用:

nc=strtoul(n,&pEnd,10);

您使用base=1表示僅允許零。

如果您需要有關整數基數的信息,可以閱讀此內容

C標准庫函數strtoul將數字系統的基數/基數用作第三個參數,該數字/基數將用於解釋第一個參數所指向的char數組。

我在哪里做錯了?

nc = strtoul(n,&pEnd, 1 );

您將基數傳遞為1,這將導致一元數字系統,即唯一可以代表的數字是0。因此,您只能將其作為輸出。 如果需要十進制系統解釋,請傳遞10而不是1。

另外,傳遞0可使函數基於前綴自動檢測系統:如果以0開頭,則將其解釋為八進制;如果是0x0X ,則將其視為十六進制;如果具有其他數字,則假定為小數。

在旁邊:

  • 如果您不需要知道轉換所考慮的字符,則不需要傳遞虛擬的第二個參數; 您可以改為傳遞NULL
  • 在C ++程序中使用C標准庫函數時, 建議您包含標頭的C ++版本; 否則,建議您在標頭中添加C ++版本的標頭。 帶有前綴c ,不帶后綴.h例如,在您的情況下,它將為#include <cstdlib>
  • using namespace std; 認為是不良做法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM