hex数字 与 hex字符串 相互装换

QT 便利函数实现

// 字符串转 hex数
QByteArray ba = QByteArray::fromHex("0105000FFF00BC39");

// hex数转字符串
QString tmpHex = ba.toHex();

/*!
 * \brief 打印 buff 16进制表示
 * \param buf
 * \param len
 */
static void PrintBuf2HexStr( char buf[],int len)
{
    QString tmp = QByteArray::fromRawData(buf,len).toHex();
    qDebug()<<"buf RawData Hex: "<<tmp;
}

/*!
 * \brief 打印 buff 2进制表示
 * \param buf
 * \param len
 */
static void PrintBuf2BinStr( char *buf,int len)
{
    QString tmp;
    for(int i = 0; i < len;i++)
    {
        quint8 item =buf[i];
        // 8bit 长度 ,2进制,0填充
        tmp += QString("%1 ").arg(item,8,2,QChar('0'));
    }
    qDebug()<<"buf RawData Bin: "<<tmp;
}

自定义

16进制字符串 转换为 16进制数


    /*!
    * @brief    16进制字符串 转换为 16进制数
    * @param    hexStr 16进制字符串
    * @return   16进制数
    */
QByteArray hexStrToHexCode(QByteArray hexStr)
{
    // hexStr to hexCode
    QByteArray sendHexArray;

    //--高4位
    char tmpCharH=0;
    //--低4位
    char tmpCharL=0;

    char resultHex=0;

    if(hexStr.length()%2!=0){
        hexStr.prepend('0');
    }

    for(int i=0;i<hexStr.length();){
        tmpCharH = hexCharToHexCode(hexStr.at(i));
        tmpCharL = hexCharToHexCode(hexStr.at(i+1));
        resultHex = (tmpCharH<<4|tmpCharL)&0xff;

        printf("%02x ",resultHex&0xff);

        sendHexArray.append(resultHex);

        i+=2;
    }

    printf("\n");
    fflush(stdout);
    return sendHexArray;
}

    /*!
    * @brief 16进制字符 转 16进制数
    * @param hexChar    4bit
    * @return 16进制数
    */
char hexCharToHexCode(char hexChar)
{
    char resultChar = 0;
    if(hexChar>='0'&&hexChar<='9'){
        resultChar = hexChar - '0';
    }
    if(hexChar>='a'&&hexChar<='f'){
        resultChar = hexChar - 'a' + 10;
    }
    if(hexChar>='A'&&hexChar<='F'){
        resultChar = hexChar - 'A' + 10;
    }
    return  resultChar;
}

16进制数 转换为 16进制字符串

  • 方法一:

    /*!
    * @brief   16进制数 转换为 16进制字符串
    * @param    hexCode
    * @return
    */
QByteArray hexCodeToHexStr(QByteArray hexCode)
{
    // hexCode  to  hexStr
    QByteArray hexStrArray;

    //--高4位
    char tmpCharH=0;
    //--低4位
    char tmpCharL=0;

    for(int i=0;i<hexCode.length();i++){
        tmpCharH = hexCodeToHexChar((hexCode.at(i)>>4&0x0f));
        tmpCharL = hexCodeToHexChar(hexCode.at(i)&0x0f);
        qDebug()<<"tmpCharH "<<tmpCharH;
        qDebug()<<"tmpCharL "<<tmpCharL;

        hexStrArray.append(tmpCharH);
        hexStrArray.append(tmpCharL);
    }
    return hexStrArray;
}

    /*!
    * @brief 16进制数 转换为 16进制字符
    * @param hexCode  16进制数 4bit
    * @return 16进制字符
    */
char hexCodeToHexChar(char hexCode)
{

    if(hexCode>0x0f){
        qWarning()<<"not a hex code !!!";
        return hexCode;
    }
    char hexStr[16] ={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
    return  hexStr[hexCode];
}
  • 方法二:

    /*!
    * @brief   16进制数 转换为 16进制字符串
    * @param    hexCode
    * @return
    */
QString hexCodeToHexString(QByteArray hexCode)
{
    QString hexStr ;
    for (int i =0;i<hexCode.size();i++) {
        //--高4位
        QString h = QString::number((hexCode.at(i)&0xf0)>>4, 16);
        //--低4位
        QString l = QString::number(hexCode.at(i)&0x0f, 16);
        hexStr.append(h);
        hexStr.append(l);
        hexStr.append(' ');
    }
    return  hexStr;
}

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐