hex文件转bin文件实用小程序

        前几天写了一篇bin文件合并的文章,提供了一个简洁的程序源码供大家参考。然后在里面也非常简单的谈到了hex文件和bin文件的区别。现在就针对它们的区别想到写一个hex转bin的小程序。当然啦,要写出来这个程序,你必须对他们的区别非常的熟悉,hex的文件格式和内容含义要非常了解。这个网上资料也非常多,很容易搜索得到。本来也打算先讲讲他们具体的区别,以及hex文件的格式内容,再给上程序源码。但感觉这样写下去文章可能就会比较长。这里呢就直接给出源码,大家不知道或者不是很清楚他们之间的区别的话,请自己去搜索,了解。这里提供一个链接给到大家。http://www.360doc.com/content/21/0127/13/99071_959195242.shtml

        在清楚的了解它们的区别之后,大家就可以直接看代码,熟悉了代码之后,还可以根据自己的需求去改动源码,接下来就直接上源码吧。

#include<stdio.h>
 
int getFileLength(char const * filename)
{
    FILE * fp = NULL;
    int length = 0;
    fp = fopen(filename,"r");
    if(fp == NULL){
        printf("open error");
        return -1;
    }
    fseek(fp,0,SEEK_END);
    length = ftell(fp);
    fclose(fp);
    return length;
}

int getCodeData(unsigned char *dest,unsigned char *src)
{
    int i = 0;
    int length = ((src[1]-'0')*16+(src[2]-'0'))*2;
    if(src[7] == 0x30 && src[8] == 0x30){
        for(i=0; i<length; i++){
            dest[i] = src[i+9];
        }
        return length;
    }
    return 0;
}

void main(void)
{
    FILE *fp_hex = NULL;
    FILE *fp_hextobin = NULL;
    unsigned char file_data[100*1024];
    unsigned char temp[100*1024];
    int count_1 = 0;
    int count_2 = 0;
    int a,b;
    int ret = 0;
    int i = 0;
    int file_size = getFileLength("app.hex");
    
    fp_hex = fopen("app.hex","r");
    if(fp_hex == NULL){
        printf("open error");
        return;
    }
    ret = fread(file_data,1,file_size,fp_hex);
    if(ret != file_size){
         printf("ret:%d file_size:%d",ret,file_size);
    }
    fclose(fp_hex);

    for(i=0; i<file_size; i++){
        /*获取到符号:(行开头)*/
        if(file_data[i] == 0x3A){
            /*收到文件结束符,退出循环*/
            if(file_data[i+8] == 0x31){
                break;
            }
           count_2 = getCodeData(temp+count_1,file_data+i);
           count_1 += count_2; 
        }
    }
    for(i=0; i<count_1; i+=2){
        if(temp[i] > 0x39){//A-F
            a = temp[i] - 0x37;
        }else{//0-9
            a = temp[i] - 0x30;
        }
        if(temp[i+1] > 0x39){//A-F
            b = temp[i+1] - 0x37;
        }else{//0-9
            b = temp[i+1] - 0x30;
        }
        file_data[i/2] = a*16 + b;
    }

    fp_hextobin = fopen("myapp.bin","wb");//不使用“wb”模式的话会在window环境下0x0a前自动加0x0d
    if(fp_hextobin == NULL){
        printf("open error");
        return;
    }
    ret = fwrite(file_data,1,count_1/2,fp_hextobin);
    if(ret != count_1/2){
         printf("write error");
         return;
    }
    fclose(fp_hextobin);
}

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值