diff options
Diffstat (limited to 'int2bin.c')
-rw-r--r-- | int2bin.c | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/int2bin.c b/int2bin.c new file mode 100644 index 0000000..4917a3d --- /dev/null +++ b/int2bin.c @@ -0,0 +1,67 @@ +#include <stdbool.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +//globals +int bits = 32; +bool raw = false; + +void print_help(char *name){ + printf("Usage: %s [OPTION]... NUMBER...\n", name); + printf("Convert NUMBER(S) to binary\n\n"); + + printf("Options:\n"); + printf(" -b, --bits\tSpecify number of bits to print (default is 32)\n"); + printf(" -h, --help\tPrint this help message and exit\n"); + printf(" --raw \tPrint only the binary form\n"); +} + +char *to_bin(int n, int bits){ + char *out = malloc(sizeof(char) * (bits+1)); + int i; + + out[bits] = '\0'; + + for(i = bits-1; i >= 0; --i){ + out[i] = (n & 1 ? '1' : '0'); + n /= 2; + } + + return out; +} + + + +int main(int argc, char **argv){ + int i; + + //print help if no arguments + if(argc < 2){ + print_help(argv[0]); + return 0; + } + + //check for arguments + for(i = 1; i < argc; ++i){ + if(!(strcmp(argv[i], "--"))){ + ++i; + break; + } + else if(!(strcmp(argv[i], "-b")) || !(strcmp(argv[i], "--bits"))){ + if(i+1 >= argc) break; //check that the flag was given an argument + bits = atoi(argv[i+1]); + ++i; + } + else if(!(strcmp(argv[i], "-h")) || !(strcmp(argv[i], "--help"))) print_help(argv[0]); + else if(!(strcmp(argv[i], "--raw"))) raw = true; + else break; + } + + //convert each argument to binary + while(i < argc){ + if(!raw) printf("%d -> ", atoi(argv[i])); + printf("%s\n", to_bin(atoi(argv[i]), bits)); + ++i; + } +} |