【问题标题】:C++ How can I assign a datatype to a binary sequence?C++ 如何将数据类型分配给二进制序列?
【发布时间】:2017-03-16 17:26:11
【问题描述】:

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

mp::cpp_int A = 51684861532215151;

如何获取二进制序列并将其直接分配给数据类型 mp::cpp_int?我意识到我可以遍历每一位并在我碰到 1 的地方添加 2^bit,但我试图避免这样做。


回复:

Galik:我的编译器(Visual Studio 2013)出于某种原因不喜欢这样。

mp::cpp_int A = 0b0010011;

它在第一个 0 之后一直把红色波浪形。

当然,提高多精度。

【问题讨论】:

  • 二进制序列是如何存储的? (它是存储小端还是大端?)
  • 您使用的是哪个“多精度库”? (哦,你能不能edit你的问题提供这些问题的答案,而不是在 cmets 中回答。)
  • 相当明显的改进是将二进制序列解释为uint64_t的序列。这不仅效率提高了 64 倍,而且还节省了位移。在一个稍微相关的说明中,我假设没有迹象。您可能需要弄清楚这对您的二进制序列是如何工作的。
  • 您是否尝试过使用二进制文字 mp::cpp_int A = 0b00110010111001010010010101010

标签: c++ arbitrary-precision multiprecision


【解决方案1】:

如何从原始位序列构造特定类型的大整数取决于该特定类型、它为此目的提供的各种构造函数/方法和/或可用的运算符重载。

唯一的通用机制涉及用一个字的低位位构造一个大整数(因为这样的构造器几乎普遍可用),然后使用算术将位推入,一次一位或一个字的价值位。这将对给定类型的细节的依赖降至最低,并且它可以在完全不变的范围内工作,但它相当麻烦且效率不高。

您的代码碎片中显示的特定类型的大整数看起来像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 之类的代码示例。

【讨论】:

    猜你喜欢
    • 2012-08-24
    • 1970-01-01
    • 1970-01-01
    • 2020-11-12
    • 2015-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-26
    相关资源
    最近更新 更多