1/////////////////////////////////////////////////////////////////////////////// 2// 3/// \file hex2bin.c 4/// \brief Converts hexadecimal input strings to binary 5// 6// Author: Lasse Collin 7// 8// This file has been put into the public domain. 9// You can do whatever you want with this file. 10// 11/////////////////////////////////////////////////////////////////////////////// 12 13#include "sysdefs.h" 14#include <stdio.h> 15#include <ctype.h> 16 17 18static int 19getbin(int x) 20{ 21 if (x >= '0' && x <= '9') 22 return x - '0'; 23 24 if (x >= 'A' && x <= 'F') 25 return x - 'A' + 10; 26 27 return x - 'a' + 10; 28} 29 30 31int 32main(void) 33{ 34 while (true) { 35 int byte = getchar(); 36 if (byte == EOF) 37 return 0; 38 if (!isxdigit(byte)) 39 continue; 40 41 const int digit = getchar(); 42 if (digit == EOF || !isxdigit(digit)) { 43 fprintf(stderr, "Invalid input\n"); 44 return 1; 45 } 46 47 byte = (getbin(byte) << 4) | getbin(digit); 48 if (putchar(byte) == EOF) { 49 perror(NULL); 50 return 1; 51 } 52 } 53} 54