Qt 串口通訊之使用16進位發送數據的轉換方式

Qt 串口通訊之使用16進位發送數據的轉換方式

一 概述
   有時候在做上位機串口通訊時,經常需要將字元串轉成16進位的形式作為發送,藉此分析記錄一下。
二 需求分析
//假設需要轉換的字元:如下

QString str = "abcdef1234";

//需求轉換成 0xab,0xcd,0xef,0x12,0x34

很民享

	由上圖分析得出,很明顯我們只需要拆分字元串然後再重新合併就ok啦,知道了解決方法,接下來就是上程式碼。
三 編寫程式碼

方法1:

/*********************
 * 功能:字元轉成10進位
 * Example: '9' -> 9
**********************/
int CalcCharValue(char ch)
{
    int value = 0;
    if(ch >= '0' && ch <= '9'){
        value = ch - '0';

    }else if( ch >= 'A' && ch <= 'F'){
        value = ch - 'A' + 10;

    }else if( ch >= 'a' && ch <= 'f'){
        value = ch - 'a' + 10;
    }

    return value;
}

/*********************
 * 功能:轉換函數
 * Example: "abcdef1234" -> 0xab,0xcd,0xef,0x12,0x34
**********************/
QByteArray QStringHexToByteArrayHex(QString str)
{
    QByteArray result;
    QByteArray array = str.toLatin1();

    /*為空不做處理*/
    if(array.isEmpty())
        return result;

    /*如果奇數時則補0*/
    if(array.count() % 2 != 0){
        array.append('0');
    }

    /*轉換過程*/
    for(int i = 0; i < array.count(); i += 2){
        char a = array.at(i);
        char b = array.at(i + 1);
        result.append((CalcCharValue(a) << 4) | CalcCharValue(b));
    }

    return result;
}
調用方式:
    QByteArray hexBuf = QStringHexToByteArrayHex("abcdef1234");
    qDebug() << hexBuf;
最後輸出結果
"\xAB\xCD\xEF\x12""4"

方法2:

QByteArray QStringHexToByteArrayHex(QString src)
{
    return QByteArray::fromHex(src.toLatin1());
}
調用方式:
    QByteArray hexBuf = QStringHexToByteArrayHex("abcdef1234");
    qDebug() << hexBuf;
最後結果:
"\xAB\xCD\xEF\x12""4"
四 結束
以上可見第二種方法比較簡單,很多時候Qt都幫封裝好了很多有用的函數,不必要自己單獨轉換。
Tags: