#include <iostream>
using namespace std;
unsigned char encodeBits(bool bools[8]);
void decodeBits(bool (&bools)[8], unsigned char input);
int main() {
bool in[] = { true, false, false, true, true, false, false, true };
bool out[8] = { false, false, false, false, false, false, false, false };
unsigned char temp = encodeBits(in);
cout << (int)temp << endl;
decodeBits(out, temp);
for(int i = 0; i < 8; i++) {
if(out[i]) {
cout << "True, ";
} else {
cout << "False, ";
}
}
cout << endl;
return 0;
}
unsigned char encodeBits(bool bools[8]) {
unsigned char retval = 0;
for(int i = 0; i < 8; i++) {
retval += (bools[i] ? 1 : 0);
retval = (i < 7 ? retval << 1 : retval);
}
return retval;
}
void decodeBits(bool (&bools)[8], unsigned char input) {
for(int i = 0; i < 8; i++) {
bools[i] = (input & 0x00000001 ? true : false);
input = (i < 7 ? input >> 1 : input);
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgogCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKdW5zaWduZWQgY2hhciBlbmNvZGVCaXRzKGJvb2wgYm9vbHNbOF0pOwp2b2lkIGRlY29kZUJpdHMoYm9vbCAoJmJvb2xzKVs4XSwgdW5zaWduZWQgY2hhciBpbnB1dCk7CiAKaW50IG1haW4oKSB7CiAgICBib29sIGluW10gPSB7IHRydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlIH07CiAgICBib29sIG91dFs4XSA9IHsgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlIH07CiAgICAKICAgIHVuc2lnbmVkIGNoYXIgdGVtcCA9IGVuY29kZUJpdHMoaW4pOwogICAgCiAgICBjb3V0IDw8IChpbnQpdGVtcCA8PCBlbmRsOwogICAgCiAgICBkZWNvZGVCaXRzKG91dCwgdGVtcCk7CiAgICAKICAgIGZvcihpbnQgaSA9IDA7IGkgPCA4OyBpKyspIHsKICAgICAgICBpZihvdXRbaV0pIHsKICAgICAgICAgICAgY291dCA8PCAiVHJ1ZSwgIjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb3V0IDw8ICJGYWxzZSwgIjsKICAgICAgICB9CiAgICB9CiAgICAKICAgIGNvdXQgPDwgZW5kbDsKCiAgICByZXR1cm4gMDsKfQogCnVuc2lnbmVkIGNoYXIgZW5jb2RlQml0cyhib29sIGJvb2xzWzhdKSB7CiAgICB1bnNpZ25lZCBjaGFyIHJldHZhbCA9IDA7CiAgICBmb3IoaW50IGkgPSAwOyBpIDwgODsgaSsrKSB7CiAgICAgICAgcmV0dmFsICs9IChib29sc1tpXSA/IDEgOiAwKTsKCQlyZXR2YWwgPSAoaSA8IDcgPyByZXR2YWwgPDwgMSA6IHJldHZhbCk7CiAgICB9CgoJcmV0dXJuIHJldHZhbDsKfQogCnZvaWQgZGVjb2RlQml0cyhib29sICgmYm9vbHMpWzhdLCB1bnNpZ25lZCBjaGFyIGlucHV0KSB7CiAgICBmb3IoaW50IGkgPSAwOyBpIDwgODsgaSsrKSB7CiAgICAgICAgYm9vbHNbaV0gPSAoaW5wdXQgJiAweDAwMDAwMDAxID8gdHJ1ZSA6IGZhbHNlKTsKICAgICAgICBpbnB1dCA9IChpIDwgNyA/IGlucHV0ID4+IDEgOiBpbnB1dCk7CiAgICB9Cn0=