Как сделать настоящий strtoul? Не впитывает фактическую строку

Возникла проблема с вводом фактической строки в 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;
}

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);

0

Другие решения

Лучшим подходом было бы избежать использования устаревших функций C и использовать стандартные функции C ++:

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

НОТА: std::stoull на самом деле позвонит ::strtoull внутренне, но это позволяет вам просто иметь дело с std::string объект вместо того, чтобы преобразовать его в строку в стиле C.

1

По вопросам рекламы [email protected]