#include <iostream>
#include <bitset>
using namespace std;
template<std::size_t num_bits>
void writeBits(ostream& os, const std::bitset<num_bits>& thebits)
{
for(std::size_t bit_pos = 0; bit_pos < num_bits;)
{
unsigned char currentByte = 0;
for(int currentBit = 0; currentBit < sizeof(unsigned char) && bit_pos < num_bits; ++currentBit, ++bit_pos)
{
currentByte |= thebits[bit_pos] ? (0x80 >> currentBit) : 0;
}
os << currentByte;
}
}
int main() {
std::bitset<4> nibble(std::string("1100"));
std::bitset<8> byte(std::string("11001010"));
std::bitset<23> number_of_bits(std::string("10101010101010101010101"));
writeBits(std::cout,nibble);
writeBits(std::cout,byte);
writeBits(std::cout,number_of_bits);
return 0;
}
CSNpbmNsdWRlIDxpb3N0cmVhbT4KCSNpbmNsdWRlIDxiaXRzZXQ+CgkKCXVzaW5nIG5hbWVzcGFjZSBzdGQ7CgkKCXRlbXBsYXRlPHN0ZDo6c2l6ZV90IG51bV9iaXRzPgoJdm9pZCB3cml0ZUJpdHMob3N0cmVhbSYgb3MsIGNvbnN0IHN0ZDo6Yml0c2V0PG51bV9iaXRzPiYgdGhlYml0cykKCXsKCQlmb3Ioc3RkOjpzaXplX3QgYml0X3BvcyA9IDA7IGJpdF9wb3MgPCBudW1fYml0czspCgkJewoJCQl1bnNpZ25lZCBjaGFyIGN1cnJlbnRCeXRlID0gMDsKCQkJZm9yKGludCBjdXJyZW50Qml0ID0gMDsgY3VycmVudEJpdCA8IHNpemVvZih1bnNpZ25lZCBjaGFyKSAmJiBiaXRfcG9zIDwgbnVtX2JpdHM7ICsrY3VycmVudEJpdCwgKytiaXRfcG9zKQoJCQl7CgkJCQljdXJyZW50Qnl0ZSB8PSB0aGViaXRzW2JpdF9wb3NdID8gKDB4ODAgPj4gY3VycmVudEJpdCkgOiAwOwoJCQl9CgkJCW9zIDw8IGN1cnJlbnRCeXRlOwoJCX0KCX0KCQoJaW50IG1haW4oKSB7CgkJc3RkOjpiaXRzZXQ8ND4gbmliYmxlKHN0ZDo6c3RyaW5nKCIxMTAwIikpOwoJCXN0ZDo6Yml0c2V0PDg+IGJ5dGUoc3RkOjpzdHJpbmcoIjExMDAxMDEwIikpOwoJCXN0ZDo6Yml0c2V0PDIzPiBudW1iZXJfb2ZfYml0cyhzdGQ6OnN0cmluZygiMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEiKSk7CgkJCgkJd3JpdGVCaXRzKHN0ZDo6Y291dCxuaWJibGUpOwoJCXdyaXRlQml0cyhzdGQ6OmNvdXQsYnl0ZSk7CgkJd3JpdGVCaXRzKHN0ZDo6Y291dCxudW1iZXJfb2ZfYml0cyk7CgkJCgkJcmV0dXJuIDA7Cgl9