Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1720223
  • 博文数量: 171
  • 博客积分: 11553
  • 博客等级: 上将
  • 技术积分: 3986
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-25 20:28
文章分类

全部博文(171)

文章存档

2012年(2)

2011年(70)

2010年(9)

2009年(14)

2008年(76)

分类: C/C++

2011-08-21 23:36:09

为了检验Base64编解码是否正确,编写一个小工具,实现了两个文件的二进制比较,每一屏分别输出10行文件A和文件B的而进行数据进行查看。

#include
#include

#define COLS 0x10
#define PAUSE 10
int main(int argc,char** argv){
    guint i = 0;
    guint col = COLS;
    FILE* fa = NULL,*fb = NULL;
    guint count = 0;
    guint len_a =0,len_b = 0;
    char buf_a[COLS],buf_b[COLS];
    guint pause = 0;

    if(argc < 3){
        g_print("Usage:010.app file1 file2\n");
        return -1;
    }
    
    fa = fopen(argv[1],"rb");
    if(fa == NULL){
        g_print("error when open %s\n",argv[1]);
        return -1;
    }
  
    fb = fopen(argv[2],"rb");
    if(fb == NULL){
        g_print("error when open %s\n",argv[2]);
        return -1;
    }

    while((len_a = fread(buf_a,1,col,fa)) == col && (len_b = fread(buf_b,1,col,fb)) == col){
        int size = 0;
        if(count % col == 0){
            g_print("%08d:\n",count);
        }
        size = MIN(len_a,len_b);
        count += size;
        
        g_print("A:");
        for(i = 0; i < size;i++){
            g_print("%02x ",(guchar)buf_a[i]);
        }
        g_print("\n");

        g_print("B:");
        for(i = 0; i < size;i++){
            g_print("%02x ",(guchar)buf_b[i]);
        }
        g_print("\n");
        if(pause++ == PAUSE){
            g_print("Press Enter to continue,(q|Q) to quit\n");
            char c = fgetc(stdin);
            if(c == 'q' || c == 'Q') break; 
            pause = 0;
        }
    }
    
    fclose(fa);
    fclose(fb);

    return 0;
}
阅读(848) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~