Преобразуйте действительно большое количество от двоичного файла до десятичного числа и распечатайте его

Несколько вещей-

  • используют «только препроцесс», чтобы посмотреть на ваш выход препроцессора. Опция gcc -E, другие компиляторы также имеют функцию

  • используют предварительно скомпилированные заголовки.

  • У gcc есть опции -verbose и --trace, которые также отображают полное дерево включения, MSVC имеет опцию / showInclude, найденную на странице свойств Advanced C ++

Также, Отображение иерархии #include для файла C ++ в Visual Studio

5
задан Jonathan Leffler 8 June 2009 в 02:17
поделиться

5 ответов

Крупнейшие стандартные интегральные данные тип unsigned long long int - в моей системе (32-битный Linux на x86) он имеет диапазон 0 - 1.8 * 10 ^ 20, что вам недостаточно, поэтому вам нужно создать свой собственный тип ( структура или массив) и написать простую математику (в основном вам просто нужно дополнение) для этого типа.

Если бы я был вами (а память не проблема), я бы использовал массив - один байт на десятичную цифру, а не BCD. BCD более компактен, так как в нем хранится 2 десятичных цифры на байт, но вам нужно приложить гораздо больше усилий, работая с старшими и младшими полубайтами отдельно.

А для печати вы просто добавляете '0' (символ, а не digit) в каждый байт вашего массива, и вы получите строку для печати.

4
ответ дан 14 December 2019 в 04:46
поделиться

Преобразование в десятичное на самом деле означает вычисление каждой степени десяти, так почему бы просто не сохранить их в массиве байтов? Затем печать просто проходит через массив.

0
ответ дан 14 December 2019 в 04:46
поделиться

Я очень рекомендую использовать такую ​​библиотеку, как GMP (библиотека GNU multiprecision). Вы можете использовать тип данных mpz_t для больших целых чисел, различные процедуры импорта / экспорта для передачи данных в mpz_t , а затем использовать mpz_out_str () , чтобы распечатать его в базе 10.

6
ответ дан 14 December 2019 в 04:46
поделиться

Вы не могли бы выделить память, скажем, для 5 int и сохранить свой номер в начале массива? Затем вручную перебирайте массив кусками размера int. Возможно, что-то вроде:

int* big = new int[5];
*big = <my big number>;
-2
ответ дан 14 December 2019 в 04:46
поделиться

Что ж, при преобразовании из двоичного кода в десятичный вам действительно не нужны ВСЕ двоичные биты одновременно.Вам просто нужны биты, мощность которых вы в настоящее время вычисляете, и, возможно, двойная переменная для хранения результатов. Вы можете поместить двоичное значение в массив, скажем, i [64], перебрать его, получить мощность в зависимости от его положения и продолжать добавлять его к двойному.

0
ответ дан 14 December 2019 в 04:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: