Decode ADC Result Using Union Bitfields

Code

#include <stdio.h>
#include <stdint.h>

typedef union{
    struct{
        uint16_t value_adc : 12; 
        uint16_t adc_channel : 4; 
    }Field; 
    uint16_t register_adc; 
}Reg_Adc; 

void extract_reg_adc(Reg_Adc *adc){
    printf("Channel: %hu\n", adc->Field.adc_channel); 
    printf("ADC Value: %hu", adc->Field.value_adc); 
}

int main(){
    Reg_Adc adc; 
    scanf("%hx", &adc.register_adc); 
    extract_reg_adc(&adc); 
    return 0;
} 

Solving Approach

 

 

 

Upvote
Downvote
Loading...

Input

0xC3F5

Expected Output

Channel: 12 ADC Value: 1013