首页 > 其他 > 详细

二进制文件与16进制(十六进制)文本文件互转工具

时间:2015-05-11 20:09:10      阅读:406      评论:0      收藏:0      [点我收藏+]
/* 
 * 本软件为免费、开源软件。
 * 本软件的版权(包括源码及二进制发布版本)归一切公众所有。
 * 您可以自由使用、传播本软件。
 * 您也可以以任何形式、任何目的使用本软件(包括源码及二进制发布版本),而不受任何版权限制。
 * =====================
 * 作者: 孙明保
 * 邮箱: sunmingbao@126.com
 */


#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
       
#define ErrQuit(fmt, args...) \
    do \
    { \
        printf("ErrQuit:%s(%d)-%s:\n"fmt"\n:%s\n", __FILE__,__LINE__,__FUNCTION__,##args, strerror(errno)); \
        exit(1);\
    } while (0)


void bin2text(int fd_s, int fd_d)
{
    char file_data_s[1024];
    char file_data_d[sizeof(file_data_s)*3];
    int i, read_len, write_len;


    while ((read_len=read(fd_s, file_data_s, sizeof(file_data_s)))>0)
    {
        for (i = 0; i < read_len; i++)
        {
            sprintf(file_data_d + i*3, "%02hhx ", file_data_s[i]);
        }
        write_len=write(fd_d, file_data_d, read_len*3);
        if (write_len<0)
            ErrQuit("write dest file failed");
    }


    if (read_len<0)
        ErrQuit("read src file failed");


}


void text2bin(int fd_s, int fd_d)
{
    char file_data_s[1024*3];
    char file_data_d[1024];
    int i, read_len, write_len;


    while ((read_len=read(fd_s, file_data_s, sizeof(file_data_s)))>0)
    {
        for (i = 0; i < read_len; i+=3)
        {
            file_data_s[i+2] = 0;
            file_data_d[i/3]=strtol(file_data_s + i, NULL, 16);
        }
        write_len=write(fd_d, file_data_d, read_len/3);
        if (write_len<0)
            ErrQuit("write dest file failed");
    }


    if (read_len<0)
        ErrQuit("read src file failed");


}


char *src_file;
char *output_file;
char *trans_type;


void parse_args(int argc, char *argv[])
{
   int opt;
    while ((opt = getopt(argc, argv, "O:o:S:s:t:T:")) != -1)
    {
       switch (opt)
       {
              


           case ‘s‘:
           case ‘S‘:
               src_file = optarg;
               break;


           case ‘o‘:    
           case ‘O‘:   
               output_file = optarg;
               break;


           case ‘t‘:    
           case ‘T‘:  
               trans_type = optarg;
               break;






           default: /* ‘?‘ */
               printf("Usage: %s  \n",
                       argv[0]);
       }
    }


}


int main(int argc, char *argv[])
{
    int fd_s, fd_d;
    parse_args(argc, argv);
    fd_s = open(src_file, O_RDONLY);
    if (fd_s<0)
        ErrQuit("open src file failed");
    fd_d = open(output_file, O_WRONLY|O_APPEND|O_CREAT
            , S_IRUSR | S_IWUSR | S_IRGRP);
    if (fd_d<0)
        ErrQuit("open dest file failed");


    if (memcmp(trans_type,"b2t", 3)==0)
        bin2text(fd_s, fd_d);
    else
        text2bin(fd_s, fd_d);
    return 0;
}



二进制文件与16进制(十六进制)文本文件互转工具

原文:http://blog.csdn.net/crazycoder8848/article/details/45646855

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!