2017-10-14 5 views
0

で<8> 2ビットをBITSET>このようになりますこと:C++へのアクセスは、私はビットセット< 8のベクトルを持っている時

01010110 01010111 01011000など。私は一度にビット2にアクセスするにはどうすればよい

?変数に2ビットを格納するにはどうすればよいですか?

そして、その後、その後、私が欲しいベクトル 01の最初の要素、 0101については

10など..私は想像することができます

+0

文字列に変換してから、最初に文字列に変換します。 – 0x499602D2

+0

'std :: bitset'は[索引演算子](http://en.cppreference.com/w/cpp/utility/bitset/operator_at)をサポートしています。格納するために 'std :: vector >'を使うことができます。 – user0042

+0

@ 0x499602D2どのように文字列に変換しますか? static_cast? – Gus

答えて

0

一つの簡単な方法は、このやっている:

#include <iostream> 
#include <string> 
#include <bitset> 
#include <vector> 

int main() { 
    std::vector<std::bitset<8>> vec_b8 { 
     std::bitset<8>("01010110"), 
     std::bitset<8>("01010111"), 
     std::bitset<8>("01011000") 
    }; 
    std::vector<std::bitset<2>> vec_b2; 

    for(auto b8 : vec_b8) { 
     for(size_t i = b8.size() - 2; i > 0; --i) { 
      std::bitset<2> b2; 
      b2[0] = b8[i]; 
      b2[1] = b8[i+1]; 
      vec_b2.emplace_back(b2);   
     } 
    } 

    for(auto b2 : vec_b2) { 
     std::cout << b2.to_string() << " "; 
    } 
} 

出力は

01 10 01 10 01 11 01 10 01 10 01 11 01 10 01 11 10 00 
です

Live Demoを参照してください。

+0

私のファイルであなたのコードを試してみた後、このエラーが出ます: 'malloc:***オブジェクトのエラー0x100812800:解放されたオブジェクトのチェックサムが正しくありません。 。 ***デバッグするためにmalloc_error_breakにブレークポイントを設定する ' – Gus

+0

@Gusそれは無関係な問題のようです。あなたがリンクで見ているように私のコードは適切に動作します。 – user0042

+0

はい、ありがとうございます。私は今修正するために別の問題があります。 – Gus

関連する問題