【发布时间】:2019-06-18 21:50:14
【问题描述】:
我有一个非常大的位集,比如 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
最后一个数字似乎在每次运行时都会发生变化,这不是我所期望的。
【问题讨论】:
-
some_int未初始化。然后你复制两个字节给它,让它的其余部分处于未初始化状态。 -
您的代码中有错误,但关于问题本身,我想不出任何解决方案,但
test(pos)每个位在位置,将 64 位打包到 uint64_t 并将这个 uint64_t 写入文件 - 手动,乏味和不好 -
您可能想看看bitset2。它允许访问底层数组。
标签: c++ bitset std-bitset