- 在升级实现过程中,为了制作唯一的升级文件,所以升级过程中绑定了设备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)));
}