24 bit pointer from a 4-byte field
On the processor I am programming on, there can be 64-bit, 31-bit and 24-bit pointers.
I'm trying to extract a 24-bit pointer out of a 4-byte word. The first 8 bits in the 4-byte word can be flags that are set. The last 3 bytes will be a pointer, addressable for up to 16mb.
For example, the 4-byte value might be 0x7F000010 which would point to location 0x00000010 in storage.
I've accomplished my goal of extracting it via this code sequence:
Code:
#include <stdio.h>
int main(void) {
void * my_32_ptr = (void *) 0x7F000010 ;
void * my_24_ptr ;
struct {
int : 8 ;
int int24 : 24 ;
} addr24 ;
#define int24 addr24.int24
int24 = (int) my_32_ptr ; <--- line 11
my_24_ptr = (void *) int24 ;
printf("my_24_ptr = %08X\n", my_24_ptr) ;
return 0 ;
}
It works, however, I get an informational message for line 11 as follows:
INFORMATIONAL CCN3451 MISC.C(PTR24):11 The target integral type cannot hold all possible values of the source integral type.
At runtime, the first byte gets lopped off as desired.
What's a better method to extract the last 3 bytes of my_32_ptr to avoid the compiler's informational message?
My processor is little endian, so no concerns about the ordering of values in the 4-byte word.
Thanks.