如何组合char矢量的二进制第n位

时间:2017-10-06 21:54:08

标签: c++ vector binary

用于在python中工作并尝试抽象如何访问单个char向量项的二进制元素。问题是python非常慢,我将其翻译成c ++。我有一个二进制文件,我将文件读入std::vector<char> buffer(1024)并组织数据,以便有32个通道,每个通道长32个字节(256位)。样本由32个通道中的每个通道组成1位。所以一组中有256个样本。读取的最佳方法是将每个32字节通道的第n位组合成一个样本? Python有一个位串模块,在c ++中有什么相关的东西?

我不会问如何将原始二进制数据读入bitset向量。我问如何读取char矢量的第n位。

1 个答案:

答案 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);
}