QT 常用的数据转换

/**
* @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 
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值