#include <stdio.h> #include <stdint.h> uint8_t extract_field(uint16_t reg) { const uint8_t start_pos = 4; const uint8_t end_pos = 8; const uint8_t len = end_pos - start_pos + 1; uint16_t mask = (((1U << len) - 1U) << start_pos); uint8_t val = (uint8_t) ((reg & mask) >> start_pos); return val; } int main() { uint16_t reg; scanf("%hx", ®); printf("%u", extract_field(reg)); return 0; }
Test Cases
Test Results
Input
0x01F0
Expected Output
31