Qt - 關於QByteArray存儲十六進制 與十六進制互轉


概要

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"

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM