Decode ADC Result Using Union Bitfields

Code

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



// typedef union{
//     struct{
//         uint16_t adc_value: 12;
//         uint16_t channel: 4;
//     };
//     uint16_t adc_reg;
// }ADC_Result;

// int main(){
//     uint16_t reg;
//     scanf("%hx",&reg);// Read hexadecimal input

//     ADC_Result adc;
//     adc.adc_reg = reg;

//     printf("Channel: %u\n",adc.channel);
//     printf("ADC Value: %u",adc.adc_value);
//     return 0;
// }

typedef union{
    struct{
        uint16_t adc_value:12;
        uint16_t adc_channel:4;
    };
    uint16_t adc_reg;
}ADC_Result;

int main(){

    uint16_t reg;

    scanf("%hx",&reg);

    ADC_Result adc;

    adc.adc_reg = reg;

    printf("Channel: %u\n", adc.adc_channel);
    printf("ADC Value: %u", adc.adc_value);

    return 0;
}

Solving Approach

 

 

 

Upvote
Downvote
Loading...

Input

0xC3F5

Expected Output

Channel: 12 ADC Value: 1013