就不废话了,直接贴源码,如果你看懂我的源码的画,我认为90%的概率能解决你16进制显示问题,
注意! 注意! 注意! qt低版本可能不提供arr.hex(’ ');这个函数
源码
QString str = ui->lineEdit->text ();//从QLineEdit 获取字符串 发送的16进制数 如11 22 33 44 55 66
qDebug()<<"打印客户所需的16进制数据"<<str;
if(str.contains (" ")){//检测字符串str是否包含空格
str.remove (" ");//删除空格 得到不包含空格的数据112233445566
}
QByteArray arr;
arr.append (str);//构建字节数组,数组值为112233445566
QByteArray hex = QByteArray::fromHex (arr);//从16进制数据转换字节数组,得到字节数组hex值为:\x11\"3DUf
qDebug()<<"打印转换后的需要发送的数据"<<hex;
//假设对端发送过来的数据,也就是通常从io 读到的数据时resArr = readAll();此时的readAll()返回的数值就是\x11\"3DUf
QString res;//
QByteArray resArr = hex;//此时等效表达式为resArr = readAll()=hex
qDebug()<<"打印接收的数据"<<hex;//打印接收的数据
res.append (hex.toHex (' '));//以16进制方式显示接收的数据
qDebug()<<"显示字符串"<<res;
/*************qDebug()打印的结果*******************************
打印客户所需的16进制数据 "112233445566"
打印转换后的需要发送的数据 "\x11\"3DUf"
打印接收的数据 "\x11\"3DUf"
显示字符串 "11 22 33 44 55 66"
*/
一个quint8 的数,如何在控件中显示16进制?当值小于16时如何将16进制数前面补0?
quint8 data = 10;
ui->lineEdit->setText(QString("%1").arg(data,2,16,QLatin1Char('0')).toUpper());//显示0A
解释:
/*
@param 1 data,需要显示的数据
@param 2 2,占位2
@param 3 16,16进制显示数据
@param 4 QLatin1Char('0'),不足补0占位
*/