我有一个二进制序列。此序列表示任意精度整数,但就计算机而言,它只是一个二进制序列。我正在用C ++工作,使用multiprecision库。我只知道如何将值分配给任意精度数据类型:
mp::cpp_int A = 51684861532215151;
如何获取二进制序列并直接将其分配给数据类型mp :: cpp_int?我意识到我可以通过每个位并添加2 ^ 位我曾经点击 1 ,但我试图避免这样做。
REPLY:
Galik:我的编译器(visual studio 2013)由于某种原因不喜欢它。
mp::cpp_int A = 0b0010011;
它在第一个0之后继续将红色压缩。
也谢谢,提升多精度。
答案 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>
。