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;
博客园文作者:Citrusliu
博文地址:https://www.cnblogs.com/citrus