2017-10-06 8 views
0

Pythonで作業し、単一のcharベクターアイテムのバイナリ要素にアクセスする方法を抽象化するのに使用されます。問題は、Pythonが非常に遅く、私はこれをC++に翻訳しているということです。私はバイナリファイルを持っており、ファイルをstd::vector<char> buffer(1024)に読み込み、データは32チャンネルあり、各チャンネルは32バイト(256ビット)であるように構成されています。サンプルは、32チャネルのそれぞれから1ビットで構成されています。したがって、1セットには256個のサンプルがあります。どの32ビット・チャンネルのn番目のビットをサンプルに結合するのに最適な方法はありますか? Pythonにはビットストリングのモジュールがあります。charベクトルの2番目のビットを結合する方法

生のバイナリデータをビットセットベクタに読み込む方法は問いません。私はcharベクトルのn番目のビットを読み込む方法を尋ねています。

+1

[ベクトルをBITSETするには、生のバイナリファイルを読む](https://stackoverflow.comのこのヘルプhttp://en.cppreference.com/w/cpp/utility/bitset/bitset –

+0

可能な複製をい/ questions/46574899/raw-binary-file-into-bitset-vectorを読む) – wally

+0

std :: vectorに読み込む理由? – lorro

答えて

1

std::vector<unsigned char>にファイルを読み込まず、代わりに​​を使用してください。

最初に、std::vectorのファイルを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); 
} 

ここで、サンプルベクトルにはそれぞれ256ビットのサンプルが32含まれています。

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

rawを読み込む代わりにuintsを解析していますデータ...私は4文字を読んで&uintにそれらをcombinongをお勧めします。 – lorro

+1

@lorro、fstreamをバイナリモードに固定しました。 –

+0

ああ、スクロール:)(電話で見て) – lorro

関連する問題