概要
1、Qt中 QByteArray 存儲十六進制的數(例如 0xff),實際是以ASCII碼存儲的,存儲形式為 '\xff'(其中 \ 是轉碼標識),單位是字節(一個字節存儲一個十六進制數)如果需要比較的話,用 array.at(0) == '\xff' 表示,而不是 array.at(0) == 0xff 。
2、判斷 QByteArray 里面存儲的是 int 整數,還是字符 'f':如果是 int 整數,則用 int 或者 hex 來判斷,如果是字符 ‘f’ ,則用 ‘f’ 來判斷。
- 比如 QByteArray 內容為 ff ,即 QByteArray[0] = f,QByteArray[1] = f,則 QByteArray 里面存儲的是兩個字符 ‘f’,而不是整數 255。
- 比如 QByteArray 內容為 ff ,即 QByteArray[0] = ff,則 QByteArray 里面存儲的是一個整數 255,而不是兩個字符 ‘ff’。
注:在 QByteArray 中 \xff 與 0xff 是等效的。
進制轉換(常用於串口和網絡通信)
int dec = 14; int dec = 20; // 十進制轉十六進制(保留4位) qDebug() << QString("%1").arg(dec, 4, 16, QLatin1Char('0')); //Return "0014" // 十進制轉二進制(至少保留4位) qDebug() << QString("%1").arg(dec, 4, 2, QLatin1Char('0')); //Return "10100" bool ok; // 十六進制轉十進制 QString hex = "14"; qDebug() << hex.toInt(&ok, 16); //return 20 // 二進制轉十進制 QString byte = "10100"; qDebug() << byte.toInt(&ok, 2); //return 20
文本與十六進制的轉換(常用於串口和網絡通信)
QString strT1 = "Qt is great!"; qDebug() << strT1.toLatin1(); // return: "Qt is great!" qDebug() << strT1.toLatin1().data(); // return: Qt is great! qDebug() << strT1.toLatin1().toHex(); // return: "517420697320677265617421" QString strT2 = "517420697320677265617421"; qDebug() << QByteArray::fromHex(strT2.toLatin1()); // return: "Qt is great!" qDebug() << QByteArray::fromHex(strT2.toLatin1().data()); // return: "Qt is great!" qDebug() << QByteArray::fromHex(strT2.toLatin1().toHex()); // return: "517420697320677265617421"
補充:
//構造一個QByteArray ba,傳入參數為const char* QByteArray ba("010203"); //ba保存的是一個一個字符 qDebug()<<"1:"<<ba; //"010203" //將一個個字符轉成10進制數字對應的16進制數字 qDebug()<<"2:"<<ba.toHex(); //"303130323033" //將一個個字符轉成兩個字符為一個數的16進制表示 qDebug()<<"3:"<<QByteArray::fromHex(ba); //"\x01\x02\x03"
