mirror of
https://github.com/Llewellynvdm/Tomb.git
synced 2024-11-22 20:45:13 +00:00
50 lines
951 B
C
50 lines
951 B
C
/*
|
|
* A simple utility that reads from stdin and output the hexencoding (on a single line) of the input
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <getopt.h>
|
|
|
|
static int decode_mode = 0;
|
|
int main(int argc, char *argv[]) {
|
|
char c;
|
|
char buf[3];
|
|
int read_bytes;
|
|
int opt;
|
|
static struct option long_options[] =
|
|
{
|
|
{"decode", no_argument, &decode_mode, 1},
|
|
{"encode", no_argument, &decode_mode, 0},
|
|
{0,0,0,0}
|
|
};
|
|
int option_index = 0;
|
|
|
|
while(1) {
|
|
option_index = 0;
|
|
opt = getopt_long(argc, argv, "", long_options, &option_index);
|
|
if(opt == -1)
|
|
break;
|
|
switch(opt) {
|
|
case 0:
|
|
break;
|
|
case '?':
|
|
return 127;
|
|
default:
|
|
abort();
|
|
}
|
|
}
|
|
if(decode_mode == 0) {
|
|
while(( c = (char)getchar() ) != EOF)
|
|
printf("%02x", c);
|
|
return 0;
|
|
} else {
|
|
while( (read_bytes=fread(buf, sizeof(char), 2, stdin)) != 0) {
|
|
if(read_bytes == 1) buf[1]='\0';
|
|
sscanf(buf, "%x", &c);
|
|
printf("%c", c);
|
|
}
|
|
return 0;
|
|
}
|
|
}
|