十六进制 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)));   

}

你可能感兴趣的:(C/C++/MFC/Qt)