#include <bitset>
#include <sstream>
#include <iostream>
#include <cinttypes>
namespace my
{
template<size_t S>
std::istream &operator >> (std::istream &is, std::bitset<S> &bits)
{
std::uint8_t byte;
size_t i = 0;
while(i < S && (is >> byte))
for(size_t j = 0; j < 8 && i < S; ++j)
bits[i++] = (byte >> j) & 1;
return is;
}
}
int main()
{
constexpr size_t bytes = 2;
std::string bit_string("\x00\xFF", bytes);
std::istringstream bit_stream(bit_string);
std::bitset<8 * bytes> b;
{
using namespace my;
bit_stream >> b;
}
std::cout << b << std::endl;
for(size_t i = 0; i < b.size(); ++i)
std::cout << b[i];
std::cout << std::endl;
}
I2luY2x1ZGUgPGJpdHNldD4KI2luY2x1ZGUgPHNzdHJlYW0+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPGNpbnR0eXBlcz4KCm5hbWVzcGFjZSBteQp7CiAgICB0ZW1wbGF0ZTxzaXplX3QgUz4gCiAgICBzdGQ6OmlzdHJlYW0gJm9wZXJhdG9yID4+IChzdGQ6OmlzdHJlYW0gJmlzLCBzdGQ6OmJpdHNldDxTPiAmYml0cykKICAgIHsKICAgICAgICBzdGQ6OnVpbnQ4X3QgYnl0ZTsKICAgICAgICBzaXplX3QgaSA9IDA7CiAgICAgICAgd2hpbGUoaSA8IFMgJiYgKGlzID4+IGJ5dGUpKQogICAgICAgICAgICBmb3Ioc2l6ZV90IGogPSAwOyBqIDwgOCAmJiBpIDwgUzsgKytqKQogICAgICAgICAgICAgICAgYml0c1tpKytdID0gKGJ5dGUgPj4gaikgJiAxOwogICAgICAgIHJldHVybiBpczsKICAgIH0KfQoKaW50IG1haW4oKQp7CgogICAgY29uc3RleHByIHNpemVfdCBieXRlcyA9IDI7CiAgICBzdGQ6OnN0cmluZyBiaXRfc3RyaW5nKCJceDAwXHhGRiIsIGJ5dGVzKTsKICAgIHN0ZDo6aXN0cmluZ3N0cmVhbSBiaXRfc3RyZWFtKGJpdF9zdHJpbmcpOwoKICAgIHN0ZDo6Yml0c2V0PDggKiBieXRlcz4gYjsKCiAgICB7CiAgICAgICAgdXNpbmcgbmFtZXNwYWNlIG15OwogICAgICAgIGJpdF9zdHJlYW0gPj4gYjsKICAgIH0KCiAgICBzdGQ6OmNvdXQgPDwgYiA8PCBzdGQ6OmVuZGw7CgogICAgZm9yKHNpemVfdCBpID0gMDsgaSA8IGIuc2l6ZSgpOyArK2kpCiAgICAgICAgc3RkOjpjb3V0IDw8IGJbaV07CgogICAgc3RkOjpjb3V0IDw8IHN0ZDo6ZW5kbDsKfQ==