0

実際の文字列を strtuol に入力する際に​​問題が発生しました。入力文字列は、32 ビット長の符号なしバイナリ値である必要があります。

明らかに問題がありますが、問題InputString = apple;を解決する方法がわかりません。何かご意見は?これはそれほど難しくないはずです。なぜそんなに苦労しているのかわかりません。

みんなありがとう。

#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main()
{
    char InputString[40];
    char *pEnd = NULL;          // Required for strtol()
    string apple = "11111111110000000000101010101000";
    //cout << "Number? ";
    //cin >> InputString;
    InputString = apple;
    unsigned long x = strtoul(InputString, &pEnd, 2);     // String to long

    cout << hex << x << endl;
    return 1;
}
4

2 に答える 2

1

より良いアプローチは、従来の C 関数を避けて、C++ 標準関数を使用することです。

string apple = "11111111110000000000101010101000";
unsigned long long x = std::stoull(apple, NULL, 2); // defined in <string>

注: std::stoullは実際には内部的に呼び出しますが、オブジェクトを C スタイルの文字列に変換する代わりに::strtoull、オブジェクトを処理するだけで済みます。std::string

于 2013-10-03T17:01:18.060 に答える
0

含む :

#include<cstdlib> // for strtol()
#include<cstring> // for strncpy()

その後

 strncpy(InputString ,apple.c_str(),40); 
                            ^
                            |
                            convert to C ctring 

または単に、

unsigned long x = strtoul(apple.c_str(), &pEnd, 2);

于 2013-10-03T16:39:36.407 に答える