本文为学习记录,若有错误,请及时联系作者,谦虚受教。
前言
治愈自己最好的方式,
就是忙碌和早睡。
一、字符串转为十六进制
代码:
.h文件
public:
static char ConvertHexChar(char c);
static QByteArray QString2Hex(QString hexStr);
.cpp文件
//字符串
QByteArray MainWindow::QString2Hex(QString hexStr)
{
QByteArray senddata;
int hexdata, lowhexdata;
int hexdatalen = 0;
int len = hexStr.length();
senddata.resize(len/2);
char lstr, hstr;
for(int i = 0; i < len; )
{
//将第一个不为' '的字符赋给hstr;
hstr = hexStr[i].toLatin1();
if(hstr == ' ')
{
i++;
continue;
}
i++;
//当i >= len时,跳出循环
if(i >= len)
break;
//当i < len时,将下一个字符赋值给lstr;
lstr = hexStr[i].toLatin1();
//将hstr和lstr转换为0-15的对应数值
hexdata = ConvertHexChar(hstr);
lowhexdata = ConvertHexChar(lstr);
//
if((hexdata == 16) || (lowhexdata == 16))
break;
else
hexdata = hexdata * 16 + lowhexdata;
i++;
senddata[hexdatalen] = (char)hexdata;
hexdatalen++;
}
senddata.resize(hexdatalen);
return senddata;
}
//单个字符
char MainWindow::ConvertHexChar(char c)
{
if((c >= '0') && (c <= '9'))
return c - 0x30;
else if((c >= 'A') && (c <= 'F'))
return c - 'A' + 10;//'A' = 65;
else if((c >= 'a') && (c <= 'f'))
return c - 'a' + 10;
else
return -1;
}
在需要转换的地方可采取调用
QByteArray QString2Hex( hexStr);
二、直接调用函数
.tohex()是将字符串转换成16进制。
.fromhex()是将十六进制转换成字符串。
//选择十六进制框
void MainWindow::on_sendBase_checkbox_stateChanged(int arg1)
{
QString str=ui->sendtextEdit->document()->toPlainText();//获取发送的信息
if(arg1==0)//不选
{
QByteArray sendData1=str.toUtf8();
sendData1=sendData1.fromHex(sendData1);//从QByteArray转换为QString
ui->sendtextEdit->document()->setPlainText(sendData1);
}
else {
QByteArray sendData=str.toUtf8();//QString转换为QByteArray
sendData=sendData.toHex(' ').toUpper();//转换成QByteArray -> 转换成16进制数,按空格分开
ui->sendtextEdit->document()->setPlainText(sendData);
}
}
总结
善于总结,多进一步。