2017-01-20 52 views
0

TL:DR私は10ビットの整数を持ち、配列に格納された2進数として欲しいです。配列に格納された整数へのバイナリ


のは、私が0-1023からint型を持っていると私はその数が、私はその後、ブール配列に格納されます10ビットのバイナリ数に変換したいとしましょう。ここに私が現在行っていることがあります。

void toBinary(bool *binary) 
{ 
    string binaryStr = bitset<10>(myValue).to_string(); //to binary 
    for (int i = 0; i < 10; i++) binary[i] = binaryStr[i] - '0'; 
} 

これより良い方法はありますか?私はこれでいくつかのビデオ処理を行い、Piでそれを実行しますので、私のプログラムはできるだけ軽くて速くする必要があります。

+2

あなたは文字列に変換しているのはなぜ?ビットセットからブールバッファに直接移動しないでください。 – PaulMcKenzie

+0

@PaulMcKenzie:私が知っている唯一の方法です。 '.to_ulong'は私にとってはうまくいきませんでした。それは私が取り除きたいものです。 –

+1

'bitset <10>'が変数に格納され、ループ内で変数を使用できるという事実を見逃したのでしょうか? – PaulMcKenzie

答えて

1

なぜビットセットを文字列に変換するのか分かりません。要素に直接アクセスするだけです。

bitset<10> myBitset(myValue); 
for (int i = 0; i < 10; i++) 
    binary[i] = myBitset[i]; 

また、それがこれを行うの最も低いレベルの方法です、ビットシフトして行くことができる:

int mask = 1; // binary 10000000 00000000 ... 
for (int i = 0, l = NUM_BITS; i < l; ++i) { 
    // binary & operation does 
    // AND logic operation for all corresponging bit 
    // so 0010&0011=0010 
    binary[i] = myValue & mask; 
    // move the bits in mask one to the right 
    mask = mask>>1; 
} 

あなたはビットセットでつもりなら、私はあなたの代わりにビットセットしておくことをお勧めしますビットセットでは、すべてのビットが実際には1ビットを占めるのに対し、boolは少なくとも8ビットが大きいため、bool*を使用しています。

最後に、ここで私はそのために作られたいくつかのテストコードがあります、あなたはベンチマークを行うには、それを使用することができます:

#include <iostream> 
#include <bitset> 
#define NUM_BITS 10 
int main(int argc, char *argv[]) 
{ 
    const int numBits = NUM_BITS; 
    bool binary[numBits]; 
    const int myValue = 1; 

    std::bitset<NUM_BITS> myBitset(myValue); 
    //for (int i = 0; i < NUM_BITS; i++) 
     //binary[i] = myBitset[i]; 

    for (int i = 0, l = NUM_BITS; i < l; ++i) { 
     std::cout<< (binary[i]?'1':'0')<<" "; 
    } 
    std::cout<<"\n"; 
    int mask = 1; // binary 10000000 00000000 ... 
    for (int i = 0, l = NUM_BITS; i < l; ++i) { 
     // binary & operation does 
     // AND logic operation for all corresponging bit 
     // so 0010&0011=0010 
     binary[i] = myValue & mask; 
     // move the bits in mask one to the right 
     mask = mask>>1; 
    } 

    for (int i = 0, l = NUM_BITS; i < l; ++i) { 
     std::cout<< (binary[i]?'1':'0')<<" "; 
    } 
} 
+0

私はGPIO状態として使用する必要があるので、私はブールを使用しています。あなたの答えをありがとう:) –

関連する問題