Question:I’m a C beginner. Having trouble understanding whats happening with this code:
I’m looking at
uint8_t first_byte = ((uint8_t *)num_ptr);
I’m trying to understand it this way: the uint64_t pointer
num_ptris first cast as a uint8_t pointer, then we index into it with the square brackets to get the first byte. Is this a correct explanation? If so is it possible to index into pointers to get their partial contents without dereferencing?
0x1869For if you will as a 64 bit number
0000 0000 0001 869F
- Intel/PC computers use little endian. What is CPU endianness?
- Therefore your 64 bit number is stored in memory as
9F86 0100 0000 0000.
- C allows us to inspect a larger data type byte by byte through a pointer to a character type.
uint8_tis a character type on all non-exotic systems.
((uint8_t *)num_ptr);Converts the 64 bit pointer to a 8 bit (character) pointer and then uses the
operator to de-reference that pointer.
- We get the first byte
0x9F= 159 dec.
%hhuis used to print
unsigned char. The most correct conversion specifier to use for
uint8_twould otherwise be
If you have better answer, please add a comment about this, thank you!