2016-11-03 53 views
0

我有一個二進制序列。這個序列代表一個任意的精確整數,但就計算機而言,它只是一個二進制序列。我正在用C++編寫多精度庫。我只知道如何分配到任意精度的數據類型:C++如何將數據類型分配給二進制序列?

mp::cpp_int A = 51684861532215151; 

我如何可以採取一個二進制序列,並直接將其分配給數據類型MP :: cpp_int?我意識到我可以通過每一位,並添加2^哪裏我碰上了,但我試圖避免這樣做。


答覆:

Galik:我的編譯器(視覺工作室2013年)不喜歡,由於某種原因。

mp::cpp_int A = 0b0010011; 

它不斷把紅色第一0

而且燁,升壓後多倍squigly。

+2

如何存儲二進制序列? (是否存儲小端或大端?) –

+0

您使用哪個「multiprecision庫」? (哦,你可以用這些問題的答案來回答你的問題,而不是回答評論。) –

+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上,包括代碼示例,如從vector<byte>初始化cpp_int

相關問題