我有一个非常大的位集,比如说 100 亿位。
我想做的是将其写入文件。但是使用 .to_string()
实际上会卡住我的电脑。
我想做的是遍历位并一次取 64 位,将其转换为 uint64
,然后将其写入文件。
但是我不知道如何访问位集的不同范围。我该怎么做?我是 c++ 的新手,不确定如何访问底层的 bitset::reference 所以请提供一个示例作为答案。
我尝试使用指针,但没有得到我期望的结果。这是我目前正在尝试的示例。
#include <iostream>
#include <bitset>
#include <cstring>
using namespace std;
int main()
{
bitset<50> bit_array(302332342342342323);
cout<<bit_array << "\n";
bitset<50>* p;
p = &bit_array;
p++;
int some_int;
memcpy(&some_int, p , 2);
cout << &bit_array << "\n";
cout << &p << "\n";
cout << some_int << "\n";
return 0;
}
输出
10000110011010100111011101011011010101011010110011
0x7ffe8aa2b090
0x7ffe8aa2b098
17736
最后的数字似乎在每次运行时都会改变,这不是我所期望的。
最佳答案
程序中有几个错误。最大值bitset<50>
可以容纳的是1125899906842623
这比 bit_array
少得多已在程序中初始化。
some_int
必须定义为 unsigned long
并验证是否unsigned long
在您的平台上有 64 位。
之后,测试bit_array
的每一位在一个循环中,然后执行适当的按位(或和移位)运算并将结果存储到 some_int
中.
std::size_t start_bit = 0;
std::size_t end_bit = 64;
for (std::size_t i = start_bit; i < end_bit; i++) {
if (bit_array[i])
some_int |= mask;
mask <<= 1;
}
您可以更改 start_bit
的值和 end_bit
适本地浏览大型位集。
参见 DEMO .
关于c++ - 如何访问位集中的位范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54358864/