Я знаю, что в Интернете есть множество учебников о том, как преобразовать строку в гекс. Ну, у меня проблема с этим.
Мой код (см. Ниже) работает до 31 символа, и я не могу на всю жизнь понять, почему. Всякий раз, когда есть 32 символа, он просто достигает максимума в 7fffffff.
Мне нужно, чтобы иметь возможность ввести что-то вроде «111111111100000000001010101000»
Должно быть легко исправить, просто не уверен, где
Моя попытка (компилируется):
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main()
{
int Base = 2;
long x;
char InputString[40];
char *pEnd = NULL; // Required for strtol()cout << "Number? ";
cin >> InputString;
x = strtol(InputString, &pEnd, Base); // String to long
cout << hex << x << endl;
return 4;
}
Это, вероятно, происходит из-за того, что длина на вашем компьютере составляет 32 бита и signed long
не может содержать 32 бита в дополнении 2. Вы можете попробовать использовать unisgned
(который не «тратит» немного на знак) или long long
которая имеет ширину 64 бита.
unsigned long x = strtoul(InputString, &pEnd, Base);
^^^^
Или же long long
:
long long x = strtoll(InputString, &pEnd, Base);
Функции strtol
а также strtoul
долгое время был доступен на C ++. В самом деле strtoll
а также long long
были введены в C ++ 11.
long
не может хранить более 32 бит (на самом деле 31 плюс знаковый бит). Попробуйте long long int
а также strtoll()
если вы хотите больше 32 бит, или unsigned long
а также strtoul()
если 32 достаточно.