2016-05-04 19 views
1

uint8_tの配列をビットセットに変換する簡単な方法はありますか?uint8_t配列をC++のビットセットに変換する

uint8_t test[16]; 
// Call a function which populates test[16] with 128 bits 
function_call(& test); 
for(int i=0; i<16; i++) 
    cout<<test[0]; // outputs a byte 
cout<<endl; 
std:: bitset<128> bsTest; 

私はこれを試してみましたが、私はあなたに可能な解決策を提案

bsTest(test); 
+0

作品罰金のため申し訳ありません。 – DeiDei

+0

私はこのエラーを受け取りました。 "エラー:呼び出しに一致するものはありません。"(std :: bitset <128ul>)(uint8_t [16]) " –

+0

@DeiDei:' test'がゼロになった場合、いくつかのコンパイラは、文字列ベースのコンストラクタを使用し、空の文字列(最初のバイトは 'NUL ')であると判断し、' bitset'をゼロにします。偶然、 'test'がゼロになっていれば正しくなりますが、それ以外の場合は間違っています。 – ShadowRanger

答えて

1

を動作しません。

あまり良くない、少し速い、少し汚いが、私はそれが助けることを願っています。

#include <bitset> 
#include <iostream> 

int main() 
{ 
    uint8_t test[16] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 
         'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p' }; 

    std::bitset<128> bsTest { } ; 

    for (unsigned ui = 0 ; ui < 16 ; ++ui) 
    { 
     bsTest <<= 8; 

     std::bitset<128> bsTmp { (unsigned long) test[ui] }; 

     bsTest |= bsTmp; 
    } 

    std::cout << bsTest; 

    return 0; 
} 

アイデアはゼロ

std::bitset<128> bsTest { } ; 

にビット集合を初期化し、他のビットセットの終了時点でuint8_tを追加

std::bitset<128> bsTmp { (unsigned long) test[ui] }; 

次いでマージ(ビットOR)2でありますビットセット

bsTest |= bsTmp; 

とシフト8ビットの結果

bsTest <<= 8; 

p.s:私のために私の悪い英語

+0

ありがとう!どういうわけか私のために働いています。私はそれをもっと早くすることができるかどうかわかります。あなたの英語は私のものと同じくらい良いですか –

関連する問題