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字节加一个空格隔开
}
  • 2
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

弈枫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值