用于在python中工作并尝试抽象如何访问单个char向量项的二进制元素。问题是python非常慢,我将其翻译成c ++。我有一个二进制文件,我将文件读入std::vector<char> buffer(1024)
并组织数据,以便有32个通道,每个通道长32个字节(256位)。样本由32个通道中的每个通道组成1位。所以一组中有256个样本。读取的最佳方法是将每个32字节通道的第n位组合成一个样本? Python有一个位串模块,在c ++中有什么相关的东西?
我不会问如何将原始二进制数据读入bitset向量。我问如何读取char矢量的第n位。
答案 0 :(得分:1)
请勿将文件读入std::vector<unsigned char>
,而应使用std::vector<std::bitset<32>>
。
首先,将文件读入std::vector
的{{1}} - s。由于它只有std::bitset
的构造函数,我们必须这样做:
unsigned long
现在,我们有一个包含256个批次,每个32位的向量。让我们从它们创建样本:
std::vector<std::bitset<32>> batches;
std::ifstream fin(<path>, std::ios::binary);
uint32_t x;
while (fin >> x)
batches.emplace_back(x);
现在,您的样本向量包含32个样本,每个样本256位。
std::vector<std::bitset<256>> samples;
for (unsigned i = 0; i < 32; i++) {
std::bitset<256> sample;
for (unsigned j = 0; j < 256; j++)
sample[j] = batches[j][i];
samples.push_back(sample);
}