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"

按16进制打印QByteArray ba

法一:

printf("data:");
for (int i = 0; i < ba.length(); i++)
    printf("%02x ", ba[i]);
printf("\n");

法二:

qDebug("length [%lld]:", ba.length());
QString msg;
for (int i = 0; i < ba.length(); i++)
{
    msg.append(QString("%1").arg(static_cast<quint8>(ba[i]), 2, 16, QLatin1Char('0')) + " ");
}
qDebug() << msg;

 

posted @ 2020-05-26 14:19  Citrusliu  阅读(20668)  评论(4编辑  收藏  举报