1 #include <stdio.h>
2 #include <stdlib.h>
3 
4 #define print(x)	{fputs(x,stdout);}
5 
dumpBytes(FILE * f)6 void dumpBytes(FILE *f)
7 {
8   int count=0, j, i, k, b;
9   unsigned char buf[4];
10 
11   for(;;)
12   {
13     printf("%04X: ", count);
14     count += 4;
15 
16     for(i=0; i<4; ++i)
17     {
18       b = fgetc(f);
19       if(b == EOF)
20 	break;
21 
22       printf("%02x ", buf[i] = (unsigned char)b);
23     }
24 
25     if(b == EOF)
26     {
27       for(k=i; k<4; ++k)
28       {
29 	print("   ");
30       }
31     }
32 
33     print("   ");
34 
35     for(k=0; k<i; ++k)
36     {
37       b = buf[k];
38       for(j=0; j<8; j++)
39       {
40 	if(b&0x80)
41 	  putchar('1');
42 	else
43 	  putchar('0');
44 
45 	b <<= 1;
46       }
47 
48       putchar(' ');
49     }
50 
51     putchar('\n');
52 
53     if(b == EOF)
54       break;
55   }
56 
57   putchar('\n');
58 }
59 
main(int argc,char * argv[])60 int main(int argc, char *argv[])
61 {
62   FILE *f;
63 
64   if(argc<2 || !(f = fopen(argv[1], "rb")))
65   {
66     printf("Gimme a file name.\n");
67     exit(1);
68   }
69 
70   dumpBytes(f);
71 
72   return 0;
73 }
74