mirror of https://git.tukaani.org/xz.git
54 lines
971 B
C
54 lines
971 B
C
///////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
/// \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;
|
|
}
|
|
}
|
|
}
|