#include <iostream>
#include <bitset>
#include <climits>
using namespace std;
template<typename T>
void serialize_as_bin(const T &t, ostream& os) {
const unsigned char *p = reinterpret_cast<const unsigned char *>(&t);
for(size_t s = 0; s < sizeof t; ++s, ++p) serialize_as_bin(*p, os);
}
template<>
void serialize_as_bin(const unsigned char &t, ostream& os) {
// Code to serialize one byte
std::bitset<CHAR_BIT> x(t);
os << x;
}
struct Person {
int a;
double b;
ostream& serialize_as_binary(ostream& os) {
serialize_as_bin(a, os);
serialize_as_bin(b, os);
return os;
}
};
int main() {
Person p;
p.a = 42;
p.b = 3.14;
p.serialize_as_binary(std::cout);
std::cout.flush();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Yml0c2V0PgojaW5jbHVkZSA8Y2xpbWl0cz4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnRlbXBsYXRlPHR5cGVuYW1lIFQ+CnZvaWQgc2VyaWFsaXplX2FzX2Jpbihjb25zdCBUICZ0LCBvc3RyZWFtJiBvcykgewogIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIgKj4oJnQpOwogIGZvcihzaXplX3QgcyA9IDA7IHMgPCBzaXplb2YgdDsgKytzLCArK3ApIHNlcmlhbGl6ZV9hc19iaW4oKnAsIG9zKTsKfQoKdGVtcGxhdGU8Pgp2b2lkIHNlcmlhbGl6ZV9hc19iaW4oY29uc3QgdW5zaWduZWQgY2hhciAmdCwgb3N0cmVhbSYgb3MpIHsKICAvLyBDb2RlIHRvIHNlcmlhbGl6ZSBvbmUgYnl0ZQogIHN0ZDo6Yml0c2V0PENIQVJfQklUPiB4KHQpOwogIG9zIDw8IHg7Cn0KCnN0cnVjdCBQZXJzb24gewogIGludCBhOwogIGRvdWJsZSBiOwoKICBvc3RyZWFtJiBzZXJpYWxpemVfYXNfYmluYXJ5KG9zdHJlYW0mIG9zKSB7CiAgICBzZXJpYWxpemVfYXNfYmluKGEsIG9zKTsKICAgIHNlcmlhbGl6ZV9hc19iaW4oYiwgb3MpOwogICAgcmV0dXJuIG9zOwogIH0KfTsKCmludCBtYWluKCkgewoJUGVyc29uIHA7CglwLmEgPSA0MjsKCXAuYiA9IDMuMTQ7CglwLnNlcmlhbGl6ZV9hc19iaW5hcnkoc3RkOjpjb3V0KTsKCXN0ZDo6Y291dC5mbHVzaCgpOwoJcmV0dXJuIDA7Cn0=