If I have the code:
uint64_t a = 0x1111222233334444;
uint32_t b = 0;
b = a;
printf("a is %llx ",a);
printf("b is %x ",b);
and the output is :
a is 1111222233334444 b is 33334444
Questions :
Will the behavior be same on big-endian machine?
If I assign a's value in b or do a typecast will the result be same in big endian?
The code you have there will work the same way. This is because the behavior of downcasting is defined by the C standard.
However, if you did this:
uint64_t a = 0x0123456789abcdefull;
uint32_t b = *(uint32_t*)&a;
printf("b is %x",b)
Then it will be endian-dependent.
EDIT:
Little Endian: b is 89abcdef
Big Endian : b is 01234567
When assigning variables, compiler handles things for you, so result will be the same on big-endian.
When typecasting pointers to memory, result will NOT be the same on big-endian.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With