如何获得给定 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
我正在使用 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