其他分享
首页 > 其他分享> > 关于QByteArray存储十六进制 与十六进制互转

关于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 中 \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"

博客园文作者:Citrusliu 博文地址:https://www.cnblogs.com/citrus

标签:十六进制,存储,QByteArray,字符,int,ff,互转
来源: https://blog.csdn.net/bd_jc/article/details/119411975