BIN_TO_HEX

这篇博客介绍了一个C语言程序,用于将BIN文件转换为HEX文件。程序包含`bin2hex.h`头文件和`main.c`源文件,通过命令行参数接收输入的BIN文件和输出的HEX文件路径。转换过程中,程序会检查输入参数,并根据`BinFile2HexFile`函数返回的状态进行错误处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

https://blog.youkuaiyun.com/hwb_1988/article/details/45131453

 

文件又是什么意思呢,它又和hex文件的区别在哪?这也不是本文的重点,下面简单的描述下:

最通俗的来讲,hex是带地址的,用下载器下载时,不需要设置偏移地址,它是文件流格式的,都是标准的ASCII码。而bin文件是不带地址的,全部是二进制数据流,打住一下,其实就是我们所谓的机器代码。有兴趣的同学,可以尝试着用反汇编,得到的就是汇编代码了。我所用的开发板S3C2440在ADS1.2上编译形成的代码就是bin格式流,用j-flash打开文件的时候就需要填入偏移地址,三星平台flash偏移地址为0,而stm32平台flash偏移地址就是0x08000000.

本来是应该要描述下hex文件的数据格式,这个就留着下一篇文章来描述,其实百度上也有很多。下一张是hex文件转换为bin文件,刚好和本文相反。说了这么多,下面就直接贴出代码了,有不详细的可以给我留言,同时也欢迎大家喷我。

代码是在VC6.0上面实现的:

首先新建bin2hex.h文件
————————————————

#ifndef BIN2HEX_H
#define BIN2HEX_H
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned long uint32_t;
/***********************************
*********************************************
就是每次读写bin文件N个字节,然后再转化为hex格式流,hex格式流长度计算方式
: + 长度 + 地址 + 类型 + N个数据(N >= 0) + 校验
1 + 2     + 4    + 2       + N * 2             + 2
********************************************************************************/
#define NUMBER_OF_ONE_LINE        0x20
#define    MAX_BUFFER_OF_ONE_LINE    (NUMBER_OF_ONE_LINE * 2 + 11) 
typedef struct {
    uint8_t len;
    uint8_t addr[2];
    uint8_t type;
    uint8_t *data;
} HexFormat;
 
typedef enum {
    RES_OK = 0,                        //操作完成
    RES_BIN_FILE_NOT_EXIST,            //相当于bin文件不存在,包括输入的路径可能存在不正确
    RES_HEX_FILE_PATH_ERROR            //目标文件路径可能输入有误            
} RESULT_STATUS;
 
RESULT_STATUS BinFile2HexFile(char *src, char *dest);
#endif

新建main.c文件,这里是带参数的,主要是方便批处理,是另有用途。
#include <stdio.h>
#include "bin2hex.h"
int main(int argc, char *argv[])
{
    RESULT_STATUS res;
    if (argc != 3)
    {
        printf("input para doesn't match\r\n");
        return -1;
    }
    res = BinFile2HexFile(argv[1], argv[2]);
    switch (res)
    {
        case RES_OK:
            printf("hex file to bin file success!\r\n");
            return -1;
        case RES_BIN_FILE_NOT_EXIST:
            printf("bin file doesn't exist!\r\n");
            return -1;
        case RES_HEX_FILE_PATH_ERROR:
            printf("hex file path is error, please check it!\r\n");
            return -1;
    }
    return 0;
}

————————————————
版权声明:本文为优快云博主「冷傲斌哥」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/hwb_1988/article/details/45131453

 

 

————————————————
版权声明:本文为优快云博主「冷傲斌哥」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/hwb_1988/article/details/45131453

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值