/**
* @file DataTpye_Qt.h
* @brief This is a common data transformation of qt for portable use.
* @details This is the detail description.
* @author Huang Zhudong
* @date 2019-05-31
* @version v1.4
* @par Copyright (c):
* @par History: v1.1 增加HexToBin函数
* v1.2 增加QByteArrayToUint32()/Uint32ToQByteArray()/UintToQString()函数,同时修改HexToBin函数支持64KB以上的转换。
* v1.3 增加QByteArray ChangeEndian(QByteArray Data)/QByteArray OutToBin(QString OutFile)函数,支持Out文件的转换。
* v1.4 修复QByteArray OutToBin(QString OutFile)函数中地址不连续的问题。
* v1.5 修复HexToBin函数中04线性地址偏移的错误。
*/
#ifndef DATATYPE_QT_H
#define DATATYPE_QT_H
#include "QString"
#include "QStringList"
#include "QFile"
#include "QProcess"
#include "stdint.h"
#include "QList"
extern QList<uint32_t> FragmentEndAddr;
extern char FillChar; // 填充位
struct BinFormat{
QByteArray BinData;
uint32_t BStartAddr;
uint32_t BEndAddr;
}; //将返回的bin文件带起始地址
// 分割数据的起始地址和结束地址
struct SplitInfo{
QString startIndex;
QString EndIndex;
QString offsetIndex;
};
class DataType_Qt
{
public:
DataType_Qt();
};
char ConvertHexChar(char ch);
QByteArray QString2Hex(QString str);
QByteArray QByteArray2Hex(QByteArray str);
QByteArray QStringToQByteArray(QString qstr);
QByteArray QStringToHex(QString str);
QByteArray QStringToChar(QString str);
uint32_t QStringToUint32(QString arry);
uint32_t QStringToDec(QString arry);
uint32_t QByteArrayToUint32_Num(QByteArray arry);
uint32_t QByteArrayToUint32(QByteArray arry);
QByteArray Uint32ToQByteArray(uint32_t data);
QString UintToQString(size_t data);
QByteArray ChangeEndian(QByteArray Data);
//Hex转换Bin文件
//pBin: 存放数据的缓冲
//返回值: *.Bin文件的内容
BinFormat HexToBin(QByteArray Hex, QString Byte8Or16);
BinFormat OutToBin(QString OutFile); //Out转Bin
QByteArray BinToHex(BinFormat bin);
QByteArray HexCRC(QByteArray Data);
BinFormat BinFix(BinFormat bin, uint32_t DstStart, uint32_t DstEnd, QString Byte8Or16);
#endif // DATATYPE_QT_H
/**
* @file DataTpye_Qt.cpp
* @brief This is a common data transformation of qt for portable use.
* @details This is the detail description.
* @author Huang Zhudong
* @date 2019-08-20
* @version v1.4
* @par Copyright (c):
* @par History:
*/
#include "DataType_Qt.h"
#include <QCoreApplication>
#include "qDebug"
char FillChar = '0'; // 烧录文件填充位,默认为'F'
DataType_Qt::DataType_Qt()
{
}
char ConvertHexChar(char ch)
{
if((ch >= '0') && (ch <= '9')) return (ch - 0x30);
else if((ch >= 'A') && (ch <= 'F')) return (ch - 'A' + 0x0a);
else if((ch >= 'a') && (ch <= 'f')) return (ch - 'a' + 0x0a);
else return (-1);
}
/**
* This function is used to convert two QString characters to Hex bases.
* @param[in] QString
* @param[out] QByteArray
* @par * For example, if QString input = "3132333435";than QByteArrat output = QString2Hex(input);
* the result is 0x12345.
* @par Created in 2018-11-12
*/
QByteArray QString2Hex(QString str)
{
QByteArray senddata;
int hexdata,lowhexdata;
int hexdatalen = 0;
int len = str.length();
senddata.resize(len/2);
unsigned char lstr,hstr;
for(int i=0; i<len; ){
hstr=(unsigned char)str[i].toLatin1();
if(hstr == ' ')
{
i++;
continue;
}
i++;
if(i >= len)
break;
lstr = str[i].toLatin1();
hexdata = ConvertHexChar(hstr);
lowhexdata = ConvertHexChar(lstr);
if((hexdata == 16) || (lowhexdata == 16))
break;
else
hexdata = hexdata * 16 + lowhexdata;
i++;
senddata[hexdatalen] = (char)hexdata;
hexdatalen++;
}
senddata.resize(hexdatalen);
return senddata;
}
/**
* This function is used to convert QString to QByteArray.
* @param[in] QString "31"
* @param[out] QByteArray '3' '1'
* @retval
* @par Created in 2018-11-12
*/
QByteArray QStringToQByteArray(QString qstr)
{
QByteArray qbyte = qstr.toLatin1();
return qbyte;
}
/**
* This function is used to convert QString to Hex.
* @param[in] QString "31"
* @param[out] QByteArray '3' '3' '3' '1'
* @retval
* @par Created in 2018-11-12
*/
QByteArray QStringToHex(QString str)
{
QByteArray tmp1 = str.toLatin1();
QByteArray tmp2 = tmp1.toHex();
return tmp2;
}
/**
* This function is used to convert QString to Hex.
* @param[in] QString '12345678'
* @param[out] uint32_t 0x12345678
* @retval
* @par Created in 2019-07-19
*/
uint32_t QStringToUint32(QString arry)
{
uint32_t res = 0;
QByteArray bytes = arry.toUtf8();
for(int i = 0; i < bytes.size(); i ++){
char m = bytes.at(i);
char tmp = ConvertHexChar(m);
if(tmp == -1){ tmp = 0;}
res = res << 4;
res += tmp;
}
return res;
}
/**
* This function is used to convert QString to Hex.
* @param[in] QString '12345678'
* @param[out] 12345678
* @retval
* @par Created in 2020-04-30
*/
uint32_t QStringToDec(QString arry)
{
uint32_t res = 0;
QByteArray bytes = arry.toUtf8();
for(int i = 0; i < bytes.size(); i ++){
char m = bytes.at(i);
char tmp = ConvertHexChar(m);
if(tmp