#include #include #include #include static char *binary(unsigned long long i, int w) { static char buff[1024]; int first=1; char *p; unsigned long long b; int c; b = 1ull<<(w-1); p = buff; for(c = w; c--; b = b>>1ull) { if (((c+1)%4) == 0 && !first) { *p++=' '; } if(i&b) { *p++='1'; } else { *p++='0'; } first=0; } *p = 0; return buff; } static char *ascii(unsigned long long num, int l) { static char s[1024]; int f; unsigned char c; s[l]=0; for(f = 0; f < l; f++) { c = num&0xff; if (isprint(c)) { s[(l-1)-f]=c; } else { s[(l-1)-f]='.'; } num = num>>8; } return s; } int main(int argc, char *argv[]) { long long snum; long long num; unsigned short word; unsigned char byte; int h_width; int b_width; int f; if(argc == 1) { printf("%s: usage %s N1 [..Nn]\n",argv[0],argv[0]); exit(EXIT_FAILURE); } for(f = 1; f < argc; f++) { num = strtoull(argv[f], NULL, 0); snum=(signed long long)num; if (num < 0x100ull) { h_width = 2; b_width = 8; } else if (num < 0x10000ull) { h_width = 4; b_width = 16; } else if (num < 0x100000000ull) { h_width = 8; b_width = 32; } else { h_width = 16; b_width = 64; } printf("Original : %s\n", argv[f]); printf("Octal : %llo\n", num); printf("Uns. Dec : %llu\n", num); printf("Sgn. Dec : %lld\n", snum); printf("Hex : %*.*llX\n", h_width, h_width, num); printf("Binary : %s\n", binary(num, b_width)); printf("Ascii : %s\n", ascii(num, b_width/4)); } return EXIT_SUCCESS; }