Вы можете использовать библиотеку boost multiprecision для хранения целого числа произвольного размера, а затем обработать его для получения двоичного вывода.
Ниже приведен код, который использует библиотеку, конвертирует в hex с использованием преобразования std :: hex и затем читает hexпоток и выходной двоичный поток.Я перегружен >> для набора битов для чтения большого десятичного числа в поток битов.<< выводит правильный двоичный вывод, как и ожидалось.Вы можете использовать любой размер набора битов (кратный 4), он должен работать.Грубо говоря, проверка ошибок должна быть сделана так, чтобы она не пересекла размер набора битов.Вероятно, вы можете начать с этой версии. </p>
#include <boost/multiprecision/cpp_int.hpp>
#include<bitset>
#include<iostream>
using namespace std;
template<int N>
istream& operator >> (istream& in, bitset<N>& b)
{
using namespace boost::multiprecision;
cpp_int bigNumber;
stringstream ss;
in >> bigNumber;
ss << std::hex << bigNumber;
b.reset();
int i = 0;
string s = ss.str();
for (auto& iter = s.rbegin(); iter != s.rend(); iter++)
{
switch (toupper(*iter))
{
case '0':
b[i] = 0; i++;
b[i] = 0; i++;
b[i] = 0; i++;
b[i] = 0; i++;
break;
case '1':
b[i] = 1; i++;
b[i] = 0; i++;
b[i] = 0; i++;
b[i] = 0; i++;
break;
case '2':
b[i] = 0; i++;
b[i] = 1; i++;
b[i] = 0; i++;
b[i] = 0; i++;
break;
case '3':
b[i] = 1; i++;
b[i] = 1; i++;
b[i] = 0; i++;
b[i] = 0; i++;
break;
case '4':
b[i] = 0; i++;
b[i] = 0; i++;
b[i] = 1; i++;
b[i] = 0; i++;
break;
case '5':
b[i] = 1; i++;
b[i] = 0; i++;
b[i] = 1; i++;
b[i] = 0; i++;
break;
case '6':
b[i] = 0; i++;
b[i] = 1; i++;
b[i] = 1; i++;
b[i] = 0; i++;
break;
case '7':
b[i] = 1; i++;
b[i] = 1; i++;
b[i] = 1; i++;
b[i] = 0; i++;
break;
case '8':
b[i] = 0; i++;
b[i] = 0; i++;
b[i] = 0; i++;
b[i] = 1; i++;
break;
case '9':
b[i] = 1; i++;
b[i] = 0; i++;
b[i] = 0; i++;
b[i] = 1; i++;
break;
case 'A':
b[i] = 0; i++;
b[i] = 1; i++;
b[i] = 0; i++;
b[i] = 1; i++;
break;
case 'B':
b[i] = 1; i++;
b[i] = 1; i++;
b[i] = 0; i++;
b[i] = 1; i++;
break;
case 'C':
b[i] = 0; i++;
b[i] = 0; i++;
b[i] = 1; i++;
b[i] = 1; i++;
break;
case 'D':
b[i] = 1; i++;
b[i] = 0; i++;
b[i] = 1; i++;
b[i] = 1; i++;
break;
case 'E':
b[i] = 0; i++;
b[i] = 1; i++;
b[i] = 1; i++;
b[i] = 1; i++;
break;
case 'F':
b[i] = 1; i++;
b[i] = 1; i++;
b[i] = 1; i++;
b[i] = 1; i++;
break;
}
}
return in;
}
int main()
{
std::bitset<80> b;
cin >> b;
cout << b << endl;
system("pause");
return 0;
}
вывод программы:
9999999999999
00000000000000000000000000000000000010010001100001001110011100101001111111111111
Press any key to continue . . .