如何获得给定 uint512_t 整数的二进制等效字符串

How do I get binary equivalent string of a given uint512_t integer

我正在使用 boost/multiprecision uint512_t 并且我尝试使用 bitset 库,但它不适用于像 uint512_t 这样的大整数。如何转换?

这是我尝试过但没有成功的方法

#include <iostream>
#include <boost/multiprecision/cpp_int.hpp>
#include <string>

using namespace boost::multiprecision;

int main(){
        uint512_t num("11579208923731619542357098500868790785326998466564056403945758400790883467166");     
        std::string binNum = std::bitset<512>(num).to_string();        
        
        return 0;
}

可能有更优雅的方法来做到这一点,但我找不到任何方法,所以这里开始。

您可以使用位掩码逐位提取并将其放入bitset<512>

#include <boost/multiprecision/cpp_int.hpp>

#include <bitset>
#include <iostream>

int main() {
    using namespace boost::multiprecision;

    uint512_t num("11579208923731619542357098500868790785326998466564056403945758400790883467166");
    std::bitset<512> b;

    size_t idx = 0;
    while(num) {                   // loop for as long as "num" isn't zero
        b[idx++] = (num & 1) != 0; // check the least significant bit
        num >>= 1;                 // shift down by one
    }

    // print the result
    std::cout << b << '\n';
}

输出:

00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100110011001100101111111111111111111111110011110