#include <iostream>
#include <string>
#include <vector>
template<typename T>
void bit_dump(T const& arg)
{
static char const *bits[] =
{
"00000000","00000001","00000010","00000011",
"00000100","00000101","00000110","00000111",
"00001000","00001001","00001010","00001011",
"00001100","00001101","00001110","00001111",
"00010000","00010001","00010010","00010011",
"00010100","00010101","00010110","00010111",
"00011000","00011001","00011010","00011011",
"00011100","00011101","00011110","00011111",
"00100000","00100001","00100010","00100011",
"00100100","00100101","00100110","00100111",
"00101000","00101001","00101010","00101011",
"00101100","00101101","00101110","00101111",
"00110000","00110001","00110010","00110011",
"00110100","00110101","00110110","00110111",
"00111000","00111001","00111010","00111011",
"00111100","00111101","00111110","00111111",
"01000000","01000001","01000010","01000011",
"01000100","01000101","01000110","01000111",
"01001000","01001001","01001010","01001011",
"01001100","01001101","01001110","01001111",
"01010000","01010001","01010010","01010011",
"01010100","01010101","01010110","01010111",
"01011000","01011001","01011010","01011011",
"01011100","01011101","01011110","01011111",
"01100000","01100001","01100010","01100011",
"01100100","01100101","01100110","01100111",
"01101000","01101001","01101010","01101011",
"01101100","01101101","01101110","01101111",
"01110000","01110001","01110010","01110011",
"01110100","01110101","01110110","01110111",
"01111000","01111001","01111010","01111011",
"01111100","01111101","01111110","01111111",
"10000000","10000001","10000010","10000011",
"10000100","10000101","10000110","10000111",
"10001000","10001001","10001010","10001011",
"10001100","10001101","10001110","10001111",
"10010000","10010001","10010010","10010011",
"10010100","10010101","10010110","10010111",
"10011000","10011001","10011010","10011011",
"10011100","10011101","10011110","10011111",
"10100000","10100001","10100010","10100011",
"10100100","10100101","10100110","10100111",
"10101000","10101001","10101010","10101011",
"10101100","10101101","10101110","10101111",
"10110000","10110001","10110010","10110011",
"10110100","10110101","10110110","10110111",
"10111000","10111001","10111010","10111011",
"10111100","10111101","10111110","10111111",
"11000000","11000001","11000010","11000011",
"11000100","11000101","11000110","11000111",
"11001000","11001001","11001010","11001011",
"11001100","11001101","11001110","11001111",
"11010000","11010001","11010010","11010011",
"11010100","11010101","11010110","11010111",
"11011000","11011001","11011010","11011011",
"11011100","11011101","11011110","11011111",
"11100000","11100001","11100010","11100011",
"11100100","11100101","11100110","11100111",
"11101000","11101001","11101010","11101011",
"11101100","11101101","11101110","11101111",
"11110000","11110001","11110010","11110011",
"11110100","11110101","11110110","11110111",
"11111000","11111001","11111010","11111011",
"11111100","11111101","11111110","11111111"
};
// universal byte dump
unsigned char const *beg = reinterpret_cast<unsigned char const*>(&arg);
unsigned char const *end = beg + sizeof arg;
while (beg != end)
std::cout << bits[*beg++] << ' ';
std::cout << "\n\n";
}
int main()
{
bit_dump(12345.6789); // dumps a double
bit_dump(63); // dumps an int
bit_dump("test"); // dumps a char (&)[5]
// simple variables
float f = 2.0;
bit_dump(f); // dumps a float
char text[] = "test";
bit_dump(text); // dumps a char (&)[5]
// and PODs
struct Foo {
int x;
int y;
} foo { 100, 101 };
bit_dump(foo);
// even non PODS (but be careful!)
struct Bar
{
short data;
std::string s;
std::vector<int> v;
Foo foo;
} bar { 10, "non-pod", {1,2,3}, foo};
bit_dump(bar);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dmVjdG9yPgoKdGVtcGxhdGU8dHlwZW5hbWUgVD4Kdm9pZCBiaXRfZHVtcChUIGNvbnN0JiBhcmcpCnsKICAgIHN0YXRpYyBjaGFyIGNvbnN0ICpiaXRzW10gPQogICAgewogICAgICAgICIwMDAwMDAwMCIsIjAwMDAwMDAxIiwiMDAwMDAwMTAiLCIwMDAwMDAxMSIsCiAgICAgICAgIjAwMDAwMTAwIiwiMDAwMDAxMDEiLCIwMDAwMDExMCIsIjAwMDAwMTExIiwKICAgICAgICAiMDAwMDEwMDAiLCIwMDAwMTAwMSIsIjAwMDAxMDEwIiwiMDAwMDEwMTEiLAogICAgICAgICIwMDAwMTEwMCIsIjAwMDAxMTAxIiwiMDAwMDExMTAiLCIwMDAwMTExMSIsCiAgICAgICAgIjAwMDEwMDAwIiwiMDAwMTAwMDEiLCIwMDAxMDAxMCIsIjAwMDEwMDExIiwKICAgICAgICAiMDAwMTAxMDAiLCIwMDAxMDEwMSIsIjAwMDEwMTEwIiwiMDAwMTAxMTEiLAogICAgICAgICIwMDAxMTAwMCIsIjAwMDExMDAxIiwiMDAwMTEwMTAiLCIwMDAxMTAxMSIsCiAgICAgICAgIjAwMDExMTAwIiwiMDAwMTExMDEiLCIwMDAxMTExMCIsIjAwMDExMTExIiwKICAgICAgICAiMDAxMDAwMDAiLCIwMDEwMDAwMSIsIjAwMTAwMDEwIiwiMDAxMDAwMTEiLAogICAgICAgICIwMDEwMDEwMCIsIjAwMTAwMTAxIiwiMDAxMDAxMTAiLCIwMDEwMDExMSIsCiAgICAgICAgIjAwMTAxMDAwIiwiMDAxMDEwMDEiLCIwMDEwMTAxMCIsIjAwMTAxMDExIiwKICAgICAgICAiMDAxMDExMDAiLCIwMDEwMTEwMSIsIjAwMTAxMTEwIiwiMDAxMDExMTEiLAogICAgICAgICIwMDExMDAwMCIsIjAwMTEwMDAxIiwiMDAxMTAwMTAiLCIwMDExMDAxMSIsCiAgICAgICAgIjAwMTEwMTAwIiwiMDAxMTAxMDEiLCIwMDExMDExMCIsIjAwMTEwMTExIiwKICAgICAgICAiMDAxMTEwMDAiLCIwMDExMTAwMSIsIjAwMTExMDEwIiwiMDAxMTEwMTEiLAogICAgICAgICIwMDExMTEwMCIsIjAwMTExMTAxIiwiMDAxMTExMTAiLCIwMDExMTExMSIsCiAgICAgICAgIjAxMDAwMDAwIiwiMDEwMDAwMDEiLCIwMTAwMDAxMCIsIjAxMDAwMDExIiwKICAgICAgICAiMDEwMDAxMDAiLCIwMTAwMDEwMSIsIjAxMDAwMTEwIiwiMDEwMDAxMTEiLAogICAgICAgICIwMTAwMTAwMCIsIjAxMDAxMDAxIiwiMDEwMDEwMTAiLCIwMTAwMTAxMSIsCiAgICAgICAgIjAxMDAxMTAwIiwiMDEwMDExMDEiLCIwMTAwMTExMCIsIjAxMDAxMTExIiwKICAgICAgICAiMDEwMTAwMDAiLCIwMTAxMDAwMSIsIjAxMDEwMDEwIiwiMDEwMTAwMTEiLAogICAgICAgICIwMTAxMDEwMCIsIjAxMDEwMTAxIiwiMDEwMTAxMTAiLCIwMTAxMDExMSIsCiAgICAgICAgIjAxMDExMDAwIiwiMDEwMTEwMDEiLCIwMTAxMTAxMCIsIjAxMDExMDExIiwKICAgICAgICAiMDEwMTExMDAiLCIwMTAxMTEwMSIsIjAxMDExMTEwIiwiMDEwMTExMTEiLAogICAgICAgICIwMTEwMDAwMCIsIjAxMTAwMDAxIiwiMDExMDAwMTAiLCIwMTEwMDAxMSIsCiAgICAgICAgIjAxMTAwMTAwIiwiMDExMDAxMDEiLCIwMTEwMDExMCIsIjAxMTAwMTExIiwKICAgICAgICAiMDExMDEwMDAiLCIwMTEwMTAwMSIsIjAxMTAxMDEwIiwiMDExMDEwMTEiLAogICAgICAgICIwMTEwMTEwMCIsIjAxMTAxMTAxIiwiMDExMDExMTAiLCIwMTEwMTExMSIsCiAgICAgICAgIjAxMTEwMDAwIiwiMDExMTAwMDEiLCIwMTExMDAxMCIsIjAxMTEwMDExIiwKICAgICAgICAiMDExMTAxMDAiLCIwMTExMDEwMSIsIjAxMTEwMTEwIiwiMDExMTAxMTEiLAogICAgICAgICIwMTExMTAwMCIsIjAxMTExMDAxIiwiMDExMTEwMTAiLCIwMTExMTAxMSIsCiAgICAgICAgIjAxMTExMTAwIiwiMDExMTExMDEiLCIwMTExMTExMCIsIjAxMTExMTExIiwKICAgICAgICAiMTAwMDAwMDAiLCIxMDAwMDAwMSIsIjEwMDAwMDEwIiwiMTAwMDAwMTEiLAogICAgICAgICIxMDAwMDEwMCIsIjEwMDAwMTAxIiwiMTAwMDAxMTAiLCIxMDAwMDExMSIsCiAgICAgICAgIjEwMDAxMDAwIiwiMTAwMDEwMDEiLCIxMDAwMTAxMCIsIjEwMDAxMDExIiwKICAgICAgICAiMTAwMDExMDAiLCIxMDAwMTEwMSIsIjEwMDAxMTEwIiwiMTAwMDExMTEiLAogICAgICAgICIxMDAxMDAwMCIsIjEwMDEwMDAxIiwiMTAwMTAwMTAiLCIxMDAxMDAxMSIsCiAgICAgICAgIjEwMDEwMTAwIiwiMTAwMTAxMDEiLCIxMDAxMDExMCIsIjEwMDEwMTExIiwKICAgICAgICAiMTAwMTEwMDAiLCIxMDAxMTAwMSIsIjEwMDExMDEwIiwiMTAwMTEwMTEiLAogICAgICAgICIxMDAxMTEwMCIsIjEwMDExMTAxIiwiMTAwMTExMTAiLCIxMDAxMTExMSIsCiAgICAgICAgIjEwMTAwMDAwIiwiMTAxMDAwMDEiLCIxMDEwMDAxMCIsIjEwMTAwMDExIiwKICAgICAgICAiMTAxMDAxMDAiLCIxMDEwMDEwMSIsIjEwMTAwMTEwIiwiMTAxMDAxMTEiLAogICAgICAgICIxMDEwMTAwMCIsIjEwMTAxMDAxIiwiMTAxMDEwMTAiLCIxMDEwMTAxMSIsCiAgICAgICAgIjEwMTAxMTAwIiwiMTAxMDExMDEiLCIxMDEwMTExMCIsIjEwMTAxMTExIiwKICAgICAgICAiMTAxMTAwMDAiLCIxMDExMDAwMSIsIjEwMTEwMDEwIiwiMTAxMTAwMTEiLAogICAgICAgICIxMDExMDEwMCIsIjEwMTEwMTAxIiwiMTAxMTAxMTAiLCIxMDExMDExMSIsCiAgICAgICAgIjEwMTExMDAwIiwiMTAxMTEwMDEiLCIxMDExMTAxMCIsIjEwMTExMDExIiwKICAgICAgICAiMTAxMTExMDAiLCIxMDExMTEwMSIsIjEwMTExMTEwIiwiMTAxMTExMTEiLAogICAgICAgICIxMTAwMDAwMCIsIjExMDAwMDAxIiwiMTEwMDAwMTAiLCIxMTAwMDAxMSIsCiAgICAgICAgIjExMDAwMTAwIiwiMTEwMDAxMDEiLCIxMTAwMDExMCIsIjExMDAwMTExIiwKICAgICAgICAiMTEwMDEwMDAiLCIxMTAwMTAwMSIsIjExMDAxMDEwIiwiMTEwMDEwMTEiLAogICAgICAgICIxMTAwMTEwMCIsIjExMDAxMTAxIiwiMTEwMDExMTAiLCIxMTAwMTExMSIsCiAgICAgICAgIjExMDEwMDAwIiwiMTEwMTAwMDEiLCIxMTAxMDAxMCIsIjExMDEwMDExIiwKICAgICAgICAiMTEwMTAxMDAiLCIxMTAxMDEwMSIsIjExMDEwMTEwIiwiMTEwMTAxMTEiLAogICAgICAgICIxMTAxMTAwMCIsIjExMDExMDAxIiwiMTEwMTEwMTAiLCIxMTAxMTAxMSIsCiAgICAgICAgIjExMDExMTAwIiwiMTEwMTExMDEiLCIxMTAxMTExMCIsIjExMDExMTExIiwKICAgICAgICAiMTExMDAwMDAiLCIxMTEwMDAwMSIsIjExMTAwMDEwIiwiMTExMDAwMTEiLAogICAgICAgICIxMTEwMDEwMCIsIjExMTAwMTAxIiwiMTExMDAxMTAiLCIxMTEwMDExMSIsCiAgICAgICAgIjExMTAxMDAwIiwiMTExMDEwMDEiLCIxMTEwMTAxMCIsIjExMTAxMDExIiwKICAgICAgICAiMTExMDExMDAiLCIxMTEwMTEwMSIsIjExMTAxMTEwIiwiMTExMDExMTEiLAogICAgICAgICIxMTExMDAwMCIsIjExMTEwMDAxIiwiMTExMTAwMTAiLCIxMTExMDAxMSIsCiAgICAgICAgIjExMTEwMTAwIiwiMTExMTAxMDEiLCIxMTExMDExMCIsIjExMTEwMTExIiwKICAgICAgICAiMTExMTEwMDAiLCIxMTExMTAwMSIsIjExMTExMDEwIiwiMTExMTEwMTEiLAogICAgICAgICIxMTExMTEwMCIsIjExMTExMTAxIiwiMTExMTExMTAiLCIxMTExMTExMSIKICAgIH07CiAgICAKICAgIC8vIHVuaXZlcnNhbCBieXRlIGR1bXAKICAgIHVuc2lnbmVkIGNoYXIgY29uc3QgKmJlZyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhciBjb25zdCo+KCZhcmcpOwogICAgdW5zaWduZWQgY2hhciBjb25zdCAqZW5kID0gYmVnICsgc2l6ZW9mIGFyZzsKICAgIHdoaWxlIChiZWcgIT0gZW5kKQogICAgICAgIHN0ZDo6Y291dCA8PCBiaXRzWypiZWcrK10gPDwgJyAnOwogICAgc3RkOjpjb3V0IDw8ICJcblxuIjsKfQoKaW50IG1haW4oKQp7CiAgICBiaXRfZHVtcCgxMjM0NS42Nzg5KTsgLy8gZHVtcHMgYSBkb3VibGUKICAgIGJpdF9kdW1wKDYzKTsgLy8gZHVtcHMgYW4gaW50CiAgICBiaXRfZHVtcCgidGVzdCIpOyAvLyBkdW1wcyBhIGNoYXIgKCYpWzVdCiAgICAKICAgIAogICAgLy8gc2ltcGxlIHZhcmlhYmxlcwogICAgZmxvYXQgZiA9IDIuMDsKICAgIGJpdF9kdW1wKGYpOyAvLyBkdW1wcyBhIGZsb2F0CiAgICBjaGFyIHRleHRbXSA9ICJ0ZXN0IjsKICAgIGJpdF9kdW1wKHRleHQpOyAvLyBkdW1wcyBhIGNoYXIgKCYpWzVdCiAgICAKICAgIC8vIGFuZCBQT0RzCiAgICBzdHJ1Y3QgRm9vIHsKICAgICAgICBpbnQgeDsKICAgICAgICBpbnQgeTsKICAgIH0gZm9vIHsgMTAwLCAxMDEgfTsKICAgIGJpdF9kdW1wKGZvbyk7CiAgICAKICAgIC8vIGV2ZW4gbm9uIFBPRFMgKGJ1dCBiZSBjYXJlZnVsISkKICAgIHN0cnVjdCBCYXIKICAgIHsKICAgICAgICBzaG9ydCBkYXRhOwogICAgICAgIHN0ZDo6c3RyaW5nIHM7CiAgICAgICAgc3RkOjp2ZWN0b3I8aW50PiB2OwogICAgICAgIEZvbyBmb287CiAgICB9IGJhciB7IDEwLCAibm9uLXBvZCIsIHsxLDIsM30sIGZvb307CiAgICBiaXRfZHVtcChiYXIpOwp9Cg==