hexencode.c (951B)
1 /* 2 * A simple utility that reads from stdin and output the hexencoding (on a single line) of the input 3 */ 4 5 #include <stdio.h> 6 #include <stdlib.h> 7 #include <getopt.h> 8 9 static int decode_mode = 0; 10 int main(int argc, char *argv[]) { 11 char c; 12 char buf[3]; 13 int read_bytes; 14 int opt; 15 static struct option long_options[] = 16 { 17 {"decode", no_argument, &decode_mode, 1}, 18 {"encode", no_argument, &decode_mode, 0}, 19 {0,0,0,0} 20 }; 21 int option_index = 0; 22 23 while(1) { 24 option_index = 0; 25 opt = getopt_long(argc, argv, "", long_options, &option_index); 26 if(opt == -1) 27 break; 28 switch(opt) { 29 case 0: 30 break; 31 case '?': 32 return 127; 33 default: 34 abort(); 35 } 36 } 37 if(decode_mode == 0) { 38 while(( c = (char)getchar() ) != EOF) 39 printf("%02x", c); 40 return 0; 41 } else { 42 while( (read_bytes=fread(buf, sizeof(char), 2, stdin)) != 0) { 43 if(read_bytes == 1) buf[1]='\0'; 44 sscanf(buf, "%x", &c); 45 printf("%c", c); 46 } 47 return 0; 48 } 49 }