C语言打印文件二进制与十六进制编码

二进制利用位运算实现,十六进制利用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
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值