C++ Как я могу назначить тип данных для двоичной последовательности?

У меня есть двоичная последовательность. Эта последовательность представляет собой целое число произвольной точности, но для компьютера это просто двоичная последовательность. Я работаю в C++, с библиотекой multiprecision. Я знаю только, как присваивать значения типу данных произвольной точности:

mp::cpp_int A = 51684861532215151;

Как я могу взять двоичную последовательность и напрямую назначить ее типу данных mp::cpp_int? Я понимаю, что могу пройти каждый бит и добавить 2^бит, где бы я ни нажал 1, но я пытаюсь избежать этого.


ОТВЕТИТЬ:

Галик: Мой компилятор (visual studio 2013) почему-то не нравится.

mp::cpp_int A = 0b0010011;

Он продолжает ставить красные волнистые после первых 0.

Также да, повысить мультиточность.

1 ответ

То, как создать конкретный тип большого целого числа из последовательности необработанных битов, зависит от этого конкретного типа, от различных конструкторов / методов, которые он предлагает для этой цели, и / или от того, какие перегрузки операторов доступны.

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

Конкретный тип большого целого числа, который показан в вашем фрагменте кода, выглядит следующим образом boost::multiprecision::cpp_int и Олаф Дитче уже предоставил ссылку на свою главную страницу документации. Преобразование в и из необработанных двоичных форматов для этого типа описано на странице Импорт и экспорт данных в и из cpp_int и cpp_bin_float, включая примеры кода, такие как инициализация cpp_int из vector<byte>,

Другие вопросы по тегам