2016-11-03 2 views
0

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

mp::cpp_int A = 51684861532215151; 

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


РЕПЛИКА:

Galik: Мой компилятор (Visual Studio 2013) не нравится, что по какой-то причине.

mp::cpp_int A = 0b0010011; 

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

Также Угу, повышение multiprecision.

+2

Как хранится двоичная последовательность? (и он хранится мало-endian или big-endian?) –

+0

Какую библиотеку «многоточия» вы используете? (О, и вы можете отредактировать свой вопрос с ответами на эти вопросы, а не отвечать на комментарии.) –

+0

Похоже, что это [Boost.Multiprecision] (http://www.boost.org/doc/ libs/1_62_0/libs/multiprecision/doc/html/index.html) –

ответ

0

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

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

Особый тип большого целого числа, показанного в вашем фрагменте кода, выглядит как boost::multiprecision::cpp_int, а Olaf Dietsche уже предоставил ссылку на его main documentation page. Преобразование в и из необработанных двоичных форматов для этого типа документируется на странице Importing and Exporting Data to and from cpp_int and cpp_bin_float, включая примеры кода, такие как инициализация cpp_int от vector<byte>.

Смежные вопросы