十六进制 QString 转QString

  • 在升级实现过程中,为了制作唯一的升级文件,所以升级过程中绑定了设备ID。然而设备ID字符串比较特殊,都是奇怪的字符,上位机工具不方便输入,故统一做十六进制字符串输入。因此才有了如下问题。
  • 一般16进制Qstring转Qstring如下即可:

Qstring str("704e0520361c5434"); 

QByteArray temp("");  

temp.append(str);

QByteArray text = QByteArray::fromHex(temp); 

QString m_DeviceID = text.data();

  • 然而在实现过程中发现针对部分字符串,上述是转化失败的,如:"704e0520361c5400".其中关键就是对于“00”的处理,会发生截断,即“00”被当做‘\0’处理了。如:十六进制字符串"704e0500361c5400"本应是8个字符,经上述转换后变成3个字符。
  • 所以项目中如下16进制Qstring转Qstring实现:

int ConvertHexChar(char ch)

{

 if ((ch >= '0') && (ch <= '9'))

{   

 return ch - '0';  

}  

else if ((ch >= 'A') && (ch <= 'F'))

{  

 return ch - 'A' + 10;  

else if ((ch >= 'a') && (ch <= 'f'))

{    

return ch - 'a' + 10;

}

else  

{  

return (-1);  

}

}

QChar fromHEXtoCHAR(QChar bit_H, QChar bit_L)

{  

int HB = ConvertHexChar(bit_H.toLatin1());  

int LB = ConvertHexChar(bit_L.toLatin1());  

int addB = HB * 16 + LB;  

return QChar(addB);

}

QString m_DeviceID("");

Qstring temp("704e0520361c5400"); 

for (int i = 0; i < 8; i++)  

{     

 m_DeviceID.append(fromHEXtoCHAR(temp.at(i * 2), temp.at(i * 2 + 1)));   

}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值