Decode Status Register into Human-Readable Flags

Code

#include <stdio.h>
#include <stdint.h>
#define     Power On        0
#define 	Error           1
#define 	Tx Ready        2
#define 	Rx Ready        3
#define 	Overheat        4
#define 	Undervoltage    5
#define 	Timeout         6
#define 	Reserved        7
const char* bit_to_string(int value) {
    switch (value) {
case 0 : return "Power On" ;
case 1 : return "Error" ;
case 2 : return "Tx Ready" ;
case 3 : return "Rx Ready" ;
case 4 : return "Overheat" ;
case 5 : return "Undervoltage" ;
case 6 : return "Timeout" ;
case 7 : return "Reserved" ;
        default: return "UNKNOWN";
    }
}
void decode_status(uint8_t status_reg) {
    // Your logic here
    for (int i = 0 ; i < 8 ; i ++ ){
        if (status_reg & (1 << i))  {
            printf ( "%s\n" , bit_to_string(i));
        }
    }

}

int main() {
    uint8_t reg;
    scanf("%hhu", &reg);
    decode_status(reg);
    return 0;
}

Solving Approach

 

 

 

Upvote
Downvote
Loading...

Input

13

Expected Output

Power On Tx Ready Rx Ready