#include <stdio.h>
typedef unsigned long long int uint64_t;
typedef unsigned short uint16_t;
typedef unsigned long long int * uintptr_t;
uint64_t get_value() {
return 0x1020304050607080ULL;
}
int main(void) {
uint64_t value = get_value();
uintptr_t addr = (uintptr_t)&value;
uint16_t u16 = *(uint16_t*)addr;
uint16_t u16_2 = *(uint16_t*)&value;
uint64_t u64 = (*(uint64_t*)addr) & 0xFFFF;
uint16_t* ptr = (uint16_t*)&value;
printf("u16 = 0x%x, u16_2 = 0x%x, u64 = 0x%llx, *ptr=0x%x\n", u16
, u16_2
, u64
, *ptr
);
printf("*ptr = 0x%x\n", *ptr
); printf("--- loop start ---\n"); for (int i=0; i<4; ++i) {
printf("*ptr = 0x%x\n", *ptr
); ptr++;
}
printf("value = 0x%llx\n", value
);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+Cgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgdWludDY0X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdWludDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCAqIHVpbnRwdHJfdDsKCnVpbnQ2NF90IGdldF92YWx1ZSgpIHsKCXJldHVybiAweDEwMjAzMDQwNTA2MDcwODBVTEw7Cn0KCmludCBtYWluKHZvaWQpIHsKCXVpbnQ2NF90IHZhbHVlID0gZ2V0X3ZhbHVlKCk7Cgl1aW50cHRyX3QgYWRkciA9ICh1aW50cHRyX3QpJnZhbHVlOwoJCgl1aW50MTZfdCB1MTYgPSAqKHVpbnQxNl90KilhZGRyOwoJdWludDE2X3QgdTE2XzIgPSAqKHVpbnQxNl90KikmdmFsdWU7Cgl1aW50NjRfdCB1NjQgPSAoKih1aW50NjRfdCopYWRkcikgJiAweEZGRkY7Cgl1aW50MTZfdCogcHRyID0gKHVpbnQxNl90KikmdmFsdWU7CglwcmludGYoInUxNiA9IDB4JXgsIHUxNl8yID0gMHgleCwgdTY0ID0gMHglbGx4LCAqcHRyPTB4JXhcbiIsIHUxNiwgdTE2XzIsIHU2NCwgKnB0cik7CgkKCXByaW50ZigiKnB0ciA9IDB4JXhcbiIsICpwdHIpOwoJcHJpbnRmKCItLS0gbG9vcCBzdGFydCAtLS1cbiIpOwoJZm9yIChpbnQgaT0wOyBpPDQ7ICsraSkgewoJCXByaW50ZigiKnB0ciA9IDB4JXhcbiIsICpwdHIpOwoJCXB0cisrOwoJfQoJCglwcmludGYoInZhbHVlID0gMHglbGx4XG4iLCB2YWx1ZSk7CgkKCXJldHVybiAwOwp9Cg==