amoBBS 阿莫电子论坛

 找回密码
 注册
搜索
bottom↓
查看: 694|回复: 13

记得有一个hex文件转换成2进制的控件

[复制链接]
发表于 2015-12-26 15:36:06 | 显示全部楼层 |阅读模式
谁帮忙发一下,我上次记得在哪看到过,但是现在搜不到了,请网友帮下忙!谢谢!
发表于 2015-12-26 17:00:32 | 显示全部楼层
IAR、MDK可以直接生成啊
发表于 2015-12-26 17:46:18 | 显示全部楼层
是不是 这个 ?!
 楼主| 发表于 2015-12-26 22:32:25 | 显示全部楼层
xyz.543 发表于 2015-12-26 17:46
是不是 这个 ?!

我记得是一个ocx的控件,现在我是想用自己的上位机上调用这个控件,然后调用里面的函数,讲hex码转换成2进制发送给下位机实现烧录!
发表于 2015-12-26 22:48:52 | 显示全部楼层
objcopy -I ihex -O binary xx.hex xx.bin
发表于 2015-12-26 22:48:58 | 显示全部楼层
vb的吗?
 楼主| 发表于 2015-12-26 22:49:54 | 显示全部楼层

ocx控件在任何平台xiaoy都可以用的啊
发表于 2015-12-26 22:59:12 | 显示全部楼层
dhw5qq 发表于 2015-12-26 22:49
ocx控件在任何平台xiaoy都可以用的啊

那就不清楚了……
发表于 2015-12-27 03:01:41 | 显示全部楼层
本帖最后由 xyz.543 于 2015-12-27 03:03 编辑
dhw5qq 发表于 2015-12-26 22:32
我记得是一个ocx的控件,现在我是想用自己的上位机上调用这个控件,然后调用里面的函数,讲hex码转换成2 ...


我说楼主啊!您要找的这控件还真是不易找啊?!
发表于 2015-12-27 08:37:21 来自手机 | 显示全部楼层
我有hex转bin的源码
 楼主| 发表于 2015-12-27 15:01:46 | 显示全部楼层
xyz.543 发表于 2015-12-27 03:01
我说楼主啊!您要找的这控件还真是不易找啊?!

上次无意看到有人发帖说自己用上位机实现固件升级,用到的就是那个控件,我当时没收藏!现在需要用,但是又找不到了!
我现在要实现选择hex元件之后转换成16进制,用串口烧录到单片机的bootload区!
发表于 2015-12-28 13:47:08 | 显示全部楼层
dhw5qq 发表于 2015-12-27 15:01
上次无意看到有人发帖说自己用上位机实现固件升级,用到的就是那个控件,我当时没收藏!现在需要用,但是 ...

您可以到搜寻引擎如 Google 或 Baidu 中,输入〔side amobbs: 您要找的关键字或词〕之后再慢慢的分析及过滤了。
发表于 2015-12-28 23:31:07 | 显示全部楼层

几年前程序扣出来的,可以看看...  那时候刚学上位机编程...将就看看吧...




#include "HexParser.h"
#include <iostream>
#include <fstream>
#include <algorithm>
#include <iterator>
#include <map>
using namespace std;


// ascii码与二进制转换
map<char, byte> mapAsciiToBit4;

// 构造函数
CHexParser::CHexParser()
{
        InitMapTable();
}
CHexParser::CHexParser(char* strHexFileName)
{
        InitMapTable();
}
// 析构函数
CHexParser::~CHexParser()
{}

bool CHexParser::ParseHexFile(char* strHexFileName)
{

        FILE *fp = fopen(strHexFileName, "r");
        if(fp ==NULL){
                MessageBox(NULL, "文件打开失败", "错误", MB_OK);
                return false;
        }
        m_vecHexPostParse.clear();
        char lineBuf[100]={0};
        int num;
        while((!feof(fp))&&fgets(lineBuf, sizeof(lineBuf), fp) ) //
        {
                if(lineBuf[0] != ':')
                {
                        MessageBox(NULL, "错误", "Hex文件格式有误", MB_OK);
                        return false;
                }
                //num = strlen(lineBuf);
                byte high;
                byte low;
                for(unsigned int i=1; i<(strlen(lineBuf)-3); i+=2)
                {
                        if(i==1){
                                if(mapAsciiToBit4[lineBuf[i+7]]!=0){
                                        break; // 02  为扩展段地址记录  //文件结束
                                }else{
                                        i=7;
                                }
                        }else{
                                high= mapAsciiToBit4[lineBuf];
                                low = mapAsciiToBit4[lineBuf[i+1]];
                                low = ((low & 0x0F) | ((high & 0x0F) << 4)); //不能在下面直接运算,会出错
                                low =EncrytData.Encryption(low);
                                //low=EncrytData.Decryption(high);
                                m_vecHexPostParse.push_back(low);


                        }
                }
        }
        fclose(fp);
    //SaveBtn->Enabled = true;
        return true;
}

bool CHexParser::SaveAsBinaryFile(char* strSaveName)
{
        //FILE * fp = fopen(strSaveName, "w");
        ofstream fout;
        fout.open(strSaveName,ios::binary);
        copy(m_vecHexPostParse.begin(), m_vecHexPostParse.end(),ostream_iterator<char>(fout,""));
        fout.close();
        return true;
}



void CHexParser::InitMapTable()
{
        mapAsciiToBit4.insert( pair<char, byte>('0', 0x00));
        mapAsciiToBit4.insert( pair<char, byte>('1', 0x01));
        mapAsciiToBit4.insert( pair<char, byte>('2', 0x02));
        mapAsciiToBit4.insert( pair<char, byte>('3', 0x03));
        mapAsciiToBit4.insert( pair<char, byte>('4', 0x04));
        mapAsciiToBit4.insert( pair<char, byte>('5', 0x05));
        mapAsciiToBit4.insert( pair<char, byte>('6', 0x06));
        mapAsciiToBit4.insert( pair<char, byte>('7', 0x07));
        mapAsciiToBit4.insert( pair<char, byte>('8', 0x08));
        mapAsciiToBit4.insert( pair<char, byte>('9', 0x09));
        mapAsciiToBit4.insert( pair<char, byte>('A', 0x0A));
        mapAsciiToBit4.insert( pair<char, byte>('B', 0x0B));
        mapAsciiToBit4.insert( pair<char, byte>('C', 0x0C));
        mapAsciiToBit4.insert( pair<char, byte>('D', 0x0D));
        mapAsciiToBit4.insert( pair<char, byte>('E', 0x0E));
        mapAsciiToBit4.insert( pair<char, byte>('F', 0x0F));
}


//以上是c文件
//下面是H文件




#ifndef _HEX_PARSER_H
#define _HEX_PARSER_H

#include <vector>
#include <string>
#include <windows.h>
#include "encrypt.h"
using namespace std;


class CHexParser{
public:
        CHexParser();
        CHexParser(char* strHexFileName);
        virtual ~CHexParser();
        bool ParseHexFile(char* strHexFileName);
        bool SaveAsBinaryFile(char* strSaveName);
        void InitMapTable();

private:
        vector<byte> m_vecHexPostParse;
        Encrypt EncrytData;
};

#endif//_HEX_PARSER_H


 楼主| 发表于 2016-1-13 23:53:25 | 显示全部楼层
mcuyongchao 发表于 2015-12-28 23:31
几年前程序扣出来的,可以看看...  那时候刚学上位机编程...将就看看吧...

stc把ISP协议公开了?
友情提示:标题不合格、重复发帖,将会被封锁ID。详情请参考:论坛通告:封锁ID、获得注册邀请码、恢复被封ID、投诉必读
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|阿莫电子论坛(原ourAVR/ourDEV) ( 公安备案:44190002001997(交互式论坛) 工信部备案:粤ICP备09047143号 )

GMT+8, 2019-6-17 09:56

阿莫电子论坛, 原"中国电子开发网"

© 2004-2018 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表