bin2hex

在单片机程序里面 有时候 要将 bin 转换为 hex  写下 mark 一下

#include "stdio.h"
typedef unsigned char BYTE;
typedef unsigned long DWORD;
int main(int argc, char* argv[])
{
    char *pt, buf[256] = ":", filename[256];
    BYTE *pRomData;
    int i, filelen, addr;
    BYTE sum;
    FILE *fp;
    if (argc < 3)
    {
        printf("no parameter!");
        return 1;
    }
    for (i = 0; argv[1][i] != '.'; i++)    filename[i] = argv[1][i];
    filename[i++] = '.'; filename[i++] = 'h'; filename[i++] = 'e'; filename[i++] = 'x'; filename[i++] = 0;

    sscanf(argv[2], "%x", &addr);

    fp = fopen(argv[1], "rb");
    if (fp == NULL)
    {
        printf("no file!");
        return 1;
    }
    fseek(fp, 0, SEEK_END);
    filelen = ftell(fp);
    printf("file len:%d\r\n", filelen);
    pRomData = new BYTE[filelen];
    fseek(fp, 0, SEEK_SET);
    fread(pRomData, 1, filelen, fp);
    fclose(fp);

    fp = fopen(filename, "wb");
    pt = buf + 1;
    sum = 0x100 - 02 - 04 - (addr / 0x1000000) - ((addr & 0xFF0000) / 0x10000);
    pt += sprintf(pt, "02000004%04X%02X\r\n", addr / 0x10000, sum);
    fwrite(buf, 1, (DWORD)pt - (DWORD)buf, fp);
    for (addr = 0; addr<filelen;)
    {
        DWORD cnt, i;
        pt = buf + 1;
        cnt = filelen - addr; if (cnt>0x20)    cnt = 0x20; pt += sprintf(pt, "%02X%04X00", cnt, addr); sum = (BYTE)(cnt + (addr / 0x100) + (addr & 0xFF));
        for (i = 0; i<cnt; i++)
        {
            pt += sprintf(pt, "%02X", pRomData[addr]); sum += pRomData[addr];
            ++addr;
        }
        sum = 0x100 - sum;
        pt += sprintf(pt, "%02X\r\n", sum);
        fwrite(buf, 1, (DWORD)pt - (DWORD)buf, fp);
    }
    pt = buf + 1;
    pt += sprintf(pt, "00000001FF\r\n");
    fwrite(buf, 1, (DWORD)pt - (DWORD)buf, fp);
    fclose(fp);
}

使用方法  bin2hex  abc.bin 0x8000000  

abc.bin 是文件名  0x8000000 是要放到的地址

编译好的exe 下载地址:https://download.csdn.net/download/ljxh401/11275081

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值