二进制利用位运算实现,十六进制利用printf实现
#include <stdio.h>
char buf[8];
int main(int argc, char **argv){
FILE *fp = NULL;
int cnt = 0;
fp = fopen(argv[1], "rb");
if(!fp){
fputs("Read file error!", stderr);
return 1;
}
while((cnt = fread(buf, sizeof(char), 8, fp))){
for(char ch = 0; ch < cnt; ch++){
for(char i = 0; i < 8; i++)
(buf[ch] & (128 >> i))?putchar('1'):putchar('0');
putchar(' ');
}
for(char ch = 0; ch < cnt; ch++) printf("%02x ", (unsigned char)buf[ch]);
putchar('\n');
}
return 0;
}
效果如下
$ cat he.txt
abcdefghijlmnop
$ ./printbin he.txt
11111111 11111110 01100001 00000000 01100010 00000000 01100011 00000000 ff fe 61 00 62 00 63 00
01100100 00000000 01100101 00000000 01100110 00000000 01100111 00000000 64 00 65 00 66 00 67 00
01101000 00000000 01101001 00000000 01101010 00000000 01101100 00000000 68 00 69 00 6a 00 6c 00
01101101 00000000 01101110 00000000 01101111 00000000 01110000 00000000 6d 00 6e 00 6f 00 70 00
00001101 00000000 00001010 00000000 0d 00 0a 00