#include <cstdint>
#include <iomanip>
#include <iostream>
long l[5];
char * c = reinterpret_cast<char*>(l);
void print()
{
for (int r = 0; r != sizeof(l)/sizeof(l[0]); ++r)
{
long value = l[r];
const char * bytes = reinterpret_cast<char*>(&value);
std::cout << "Array index " << r << ": ";
for (int c = 0; c != sizeof(l[0]); ++c)
{
if (c != 0)
{
std::cout << " ";
}
std::cout << std::setw(2) << std::setfill('0') << static_cast<int>(bytes[c]);
}
std::cout << std::endl;
}
std::cout << std::endl;
}
int main()
{
long & aligned = *reinterpret_cast<long*>(&c[0]);
long & misaligned = *reinterpret_cast<long*>(&c[2*sizeof(long) - 1]); // misaligned
std::cout << "aligned: " << aligned << std::endl;
std::cout << "misaligned: " << misaligned << std::endl;
print();
aligned = 1;
misaligned = 2;
std::cout << "aligned: " << aligned << std::endl;
std::cout << "misaligned: " << misaligned << std::endl;
print();
int n = 0;
short * s = reinterpret_cast<short*>(&n);
}
I2luY2x1ZGUgPGNzdGRpbnQ+CiNpbmNsdWRlIDxpb21hbmlwPgojaW5jbHVkZSA8aW9zdHJlYW0+Cgpsb25nIGxbNV07CmNoYXIgKiBjID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4obCk7Cgp2b2lkIHByaW50KCkKewoJZm9yIChpbnQgciA9IDA7IHIgIT0gc2l6ZW9mKGwpL3NpemVvZihsWzBdKTsgKytyKQoJewoJCWxvbmcgdmFsdWUgPSBsW3JdOwoJCWNvbnN0IGNoYXIgKiBieXRlcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KCZ2YWx1ZSk7CgoJCXN0ZDo6Y291dCA8PCAiQXJyYXkgaW5kZXggIiA8PCByIDw8ICI6ICI7CgkJZm9yIChpbnQgYyA9IDA7IGMgIT0gc2l6ZW9mKGxbMF0pOyArK2MpCgkJewoJCQlpZiAoYyAhPSAwKQoJCQl7CgkJCQlzdGQ6OmNvdXQgPDwgIiAiOwoJCQl9CgkJCXN0ZDo6Y291dCA8PCBzdGQ6OnNldHcoMikgPDwgc3RkOjpzZXRmaWxsKCcwJykgPDwgc3RhdGljX2Nhc3Q8aW50PihieXRlc1tjXSk7CgkJfQoJCXN0ZDo6Y291dCA8PCBzdGQ6OmVuZGw7Cgl9CglzdGQ6OmNvdXQgPDwgc3RkOjplbmRsOwp9CgppbnQgbWFpbigpCnsKCWxvbmcgJiBhbGlnbmVkID0gKnJlaW50ZXJwcmV0X2Nhc3Q8bG9uZyo+KCZjWzBdKTsKCWxvbmcgJiBtaXNhbGlnbmVkID0gKnJlaW50ZXJwcmV0X2Nhc3Q8bG9uZyo+KCZjWzIqc2l6ZW9mKGxvbmcpIC0gMV0pOyAvLyBtaXNhbGlnbmVkCQoJCgoJc3RkOjpjb3V0IDw8ICJhbGlnbmVkOiAiIDw8IGFsaWduZWQgPDwgc3RkOjplbmRsOwoJc3RkOjpjb3V0IDw8ICJtaXNhbGlnbmVkOiAiIDw8IG1pc2FsaWduZWQgPDwgc3RkOjplbmRsOwoJcHJpbnQoKTsKCglhbGlnbmVkID0gMTsKCW1pc2FsaWduZWQgPSAyOwoJCglzdGQ6OmNvdXQgPDwgImFsaWduZWQ6ICIgPDwgYWxpZ25lZCA8PCBzdGQ6OmVuZGw7CglzdGQ6OmNvdXQgPDwgIm1pc2FsaWduZWQ6ICIgPDwgbWlzYWxpZ25lZCA8PCBzdGQ6OmVuZGw7CglwcmludCgpOwoKCWludCBuID0gMDsKCXNob3J0ICogcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8c2hvcnQqPigmbik7Cgp9IA==