dhw5qq 发表于 2015-12-26 15:36:06

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

谁帮忙发一下,我上次记得在哪看到过,但是现在搜不到了,请网友帮下忙!谢谢!

10xjzheng 发表于 2015-12-26 17:00:32

IAR、MDK可以直接生成啊

xyz.543 发表于 2015-12-26 17:46:18

是不是 这个 ?!

dhw5qq 发表于 2015-12-26 22:32:25

xyz.543 发表于 2015-12-26 17:46
是不是 这个 ?!

我记得是一个ocx的控件,现在我是想用自己的上位机上调用这个控件,然后调用里面的函数,讲hex码转换成2进制发送给下位机实现烧录!

xwkm 发表于 2015-12-26 22:48:52

objcopy -I ihex -O binary xx.hex xx.bin

runapp 发表于 2015-12-26 22:48:58

vb的吗?

dhw5qq 发表于 2015-12-26 22:49:54

runapp 发表于 2015-12-26 22:48
vb的吗?

ocx控件在任何平台xiaoy都可以用的啊

runapp 发表于 2015-12-26 22:59:12

dhw5qq 发表于 2015-12-26 22:49
ocx控件在任何平台xiaoy都可以用的啊

那就不清楚了……

xyz.543 发表于 2015-12-27 03:01:41

本帖最后由 xyz.543 于 2015-12-27 03:03 编辑

dhw5qq 发表于 2015-12-26 22:32
我记得是一个ocx的控件,现在我是想用自己的上位机上调用这个控件,然后调用里面的函数,讲hex码转换成2 ...

我说楼主啊!您要找的这控件还真是不易找啊?!

zouzhichao 发表于 2015-12-27 08:37:21

我有hex转bin的源码

dhw5qq 发表于 2015-12-27 15:01:46

xyz.543 发表于 2015-12-27 03:01
我说楼主啊!您要找的这控件还真是不易找啊?!

上次无意看到有人发帖说自己用上位机实现固件升级,用到的就是那个控件,我当时没收藏!现在需要用,但是又找不到了!
我现在要实现选择hex元件之后转换成16进制,用串口烧录到单片机的bootload区!

xyz.543 发表于 2015-12-28 13:47:08

dhw5qq 发表于 2015-12-27 15:01
上次无意看到有人发帖说自己用上位机实现固件升级,用到的就是那个控件,我当时没收藏!现在需要用,但是 ...

您可以到搜寻引擎如 Google 或 Baidu 中,输入〔side amobbs: 您要找的关键字或词〕之后再慢慢的分析及过滤了。

mcuyongchao 发表于 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={0};
      int num;
      while((!feof(fp))&&fgets(lineBuf, sizeof(lineBuf), fp) ) //
      {
                if(lineBuf != ':')
                {
                        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]!=0){
                                        break; // 02为扩展段地址记录//文件结束
                              }else{
                                        i=7;
                              }
                        }else{
                              high= mapAsciiToBit4];
                              low = mapAsciiToBit4];
                              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


dhw5qq 发表于 2016-1-13 23:53:25

mcuyongchao 发表于 2015-12-28 23:31
几年前程序扣出来的,可以看看...那时候刚学上位机编程...将就看看吧...




stc把ISP协议公开了?
页: [1]
查看完整版本: 记得有一个hex文件转换成2进制的控件