| /////////////////////////////////////////////////////////////////////////////// | |
| // | |
| /// \file hex2bin.c | |
| /// \brief Converts hexadecimal input strings to binary | |
| // | |
| // Author: Lasse Collin | |
| // | |
| // This file has been put into the public domain. | |
| // You can do whatever you want with this file. | |
| // | |
| /////////////////////////////////////////////////////////////////////////////// | |
| #include "sysdefs.h" | |
| #include <stdio.h> | |
| #include <ctype.h> | |
| static int | |
| getbin(int x) | |
| { | |
| if (x >= '0' && x <= '9') | |
| return x - '0'; | |
| if (x >= 'A' && x <= 'F') | |
| return x - 'A' + 10; | |
| return x - 'a' + 10; | |
| } | |
| int | |
| main(void) | |
| { | |
| while (true) { | |
| int byte = getchar(); | |
| if (byte == EOF) | |
| return 0; | |
| if (!isxdigit(byte)) | |
| continue; | |
| const int digit = getchar(); | |
| if (digit == EOF || !isxdigit(digit)) { | |
| fprintf(stderr, "Invalid input\n"); | |
| return 1; | |
| } | |
| byte = (getbin(byte) << 4) | getbin(digit); | |
| if (putchar(byte) == EOF) { | |
| perror(NULL); | |
| return 1; | |
| } | |
| } | |
| } |