2017-10-06 91 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