You don't have to convert anything as you already wrote yourself. To check for bit 12 on value just use:
if (value & (1 << 12)) ...
Or extract the subvalue of variable "value" at startbit 12, length 8 bit:
uint32_t detail = (value >> 12) & 0xFF;
I don't see any need for arrays or the like, the processor is able to handle the bit values.