Qt:十六进制字符串和十六进制互转
前言
网上查了不少方式,踩了不少坑,最终这个方式是我目前使用感觉较好的一种,具体出处已经没印象了,这里放出完整代码供大家参考
一、字符串转换十六进制
1、封装函数
//数据转换 字符串转十六进制
void uart::StringToHex(QString str, QByteArray &senddata)
{
int hexdata,lowhexdata;
int hexdatalen = 0;
int len = str.length();
senddata.resize(len/2);
char lstr,hstr;
for(int i=0; i<len; )
{
hstr=str[i].toLatin1();
if(hstr == ' ')
{
i++;
continue;
}
i++;
if(i >= len)
break;
lstr = str[i].toLatin1();
hexdata = convertHexChart(hstr);
lowhexdata = convertHexChart(lstr);
if((hexdata == 16) || (lowhexdata == 16))
break;
else
hexdata = hexdata*16+lowhexdata;
i++;
senddata[hexdatalen] = (char)hexdata;
hexdatalen++;
}
senddata.resize(hexdatalen);
}
//数据转换 字符串转16进制数据处理
char uart::convertHexChart(char ch)
{
if((ch >= '0') && (ch <= '9'))
return ch-0x30; // 0x30 对应 ‘0’
else if((ch >= 'A') && (ch <= 'F'))
return ch-'A'+10;
else if((ch >= 'a') && (ch <= 'f'))
return ch-'a'+10;
else
return ch-ch;//不在0-f范围内的会发送成0
}
2、函数调用示例
QString getmacS = ui->tableWidget->item(i,0)->text(); // 取出字符串
QByteArray getmacB; // 创建QByteArray数组
uart1->StringToHex(getmacS,getmacB); // 字符串转换16进制
二、16进制转换字符串
// savemacB为需要转换的16进制字节数组 QByteArray 类型
QString savemacS; // 定义转换后的字符串
QDataStream out(&savemacB,QIODevice::ReadOnly); // 将字节数组读入
while(!out.atEnd()) // 循环进行转换
{
qint8 outChar = 0;
out>>outChar; // 每字节填充一次,直到结束
//十六进制的转换
QString str = QString("%1").arg(outChar&0xFF,2,16,QLatin1Char('0'));
savemacS.append(str.toUpper()); // 转换后数据存入
savemacS.append(" "); // 每转换2字节加一个空格隔开
}