2017-10-06 170 views
0

用于在python中工作并尝试抽象如何访问单个字符矢量项的二进制元素。问题是python非常慢,我将它翻译成C++。我有一个二进制文件,我读取文件到一个std::vector<char> buffer(1024)和数据的组织,以便有32个通道,每个通道是32个字节(256位)长。一个采样由32个通道中的每一个组成。所以一个集合中有256个样本。读取的最佳方式是将每个32字节通道的第n位组合成样本? Python有一个bitstring模块,任何与C++有关的东西?如何结合字符矢量的二进制第n位

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

+1

这是否帮助http://en.cppreference.com/w/cpp/utility/bitset/bitset –

+0

的[读入原始的二进制文件,位集合矢量]可能的复制(https://stackoverflow.com/questions/46574899/read-raw-binary-file-in-to-bitset-vector) – wally

+0

为什么要读入std :: vector ? – lorro

回答

1

不要将文件读入std::vector<unsigned char>,而应使用​​。

首先,将文件读入的std::bitset-s。因为它只有从unsigned long一个构造函数,我们要做这样的:

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

现在,您的样本向量包含32个样本,每个样本的256位。

samples[i] // <-- Sample i 
samples[i][j] // <-- Bit j in sample i 
+0

您解析提示,而不是读取原始数据...我建议阅读4个字符并将它们组合为uint。 – lorro

+1

@lorro,将fstream固定为二进制模式。 –

+0

啊,滚动:)(在手机上查看) – lorro

相关问题