Я не понимаю, почему вы преобразовываете биттет в строку. Просто обращайтесь к его элементам напрямую.
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;
}
Если вы собираетесь с BitSet, я рекомендую вам сохранить BitSet вместо использования bool*
, потому что в битах каждый бит фактически занимает один бит, тогда как 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')<<" ";
}
}
Почему вы преобразования в строку? Почему бы не перейти непосредственно из битового набора в буфер bool? – PaulMcKenzie
@PaulMcKenzie: Это единственный способ узнать. «.to_ulong» на самом деле не сработало хорошо для меня. Вот от чего я хочу избавиться. –
Возможно, вы упустили тот факт, что 'bitset <10>' может быть сохранен в переменной, а затем использовать переменную в цикле? – PaulMcKenzie