Extracting bits from hex encoded binary
You're best off using strtoul():

messageType = message[0];
uint32_t data = strtoul(message + 1, NULL, 16);


The trick here is that message is just an array, so you can get the first letter with message[0]. Also, since C arrays are themselves just pointers to blocks of memory, message + 1 actually points to the location in memory of message[1], so you start processing the numbers from the second character in the string, thus omitting the first letter.

strtoul() takes a third parameter which is the base to decode from - 16 in this case for hexadecimal. 

From there you can then use your bit shifting and masking to slice up your 32-bit value into your required sub values.