C ++如何为二进制序列分配数据类型?

时间:2016-11-03 07:46:38

标签: c++ arbitrary-precision multiprecision

我有一个二进制序列。此序列表示任意精度整数,但就计算机而言,它只是一个二进制序列。我正在用C ++工作,使用multiprecision库。我只知道如何将分配给任意精度数据类型:

mp::cpp_int A = 51684861532215151;

如何获取二进制序列并直接将其分配给数据类型mp :: cpp_int?我意识到我可以通过每个位并添加2 ^ 我曾经点击 1 ,但我试图避免这样做。

REPLY:

Galik:我的编译器(visual studio 2013)由于某种原因不喜欢它。

mp::cpp_int A = 0b0010011;

它在第一个0之后继续将红色压缩。

也谢谢,提升多精度。

1 个答案:

答案 0 :(得分: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>