串口异或效验 C++代码实现
直接上代码片段
QString str="32000"; str += QString::number(ui->lightBox->value()); char* ch; QByteArray ba = str.toLatin1(); ch = ba.data(); j = ch[0]; for (int i = 1; i < str.length(); i++) { j = j^ch[i];//返回10进制的效验码 } //换算16进制 for (; k > 0;) { if (j < 10) { str += "0" + QString::number(j); k = 0; } else if (j > 9 && j < 16) { if (j == 10) str += "0A"; if (j == 11) str += "0B"; if (j == 12) str += "0C"; if (j == 13) str += "0D"; if (j == 14) str += "0E"; if (j == 15) str += "0F"; k = 0; } else { int a = j / 16; int b = j % 16; if (a< 10) { str +=QString::number(a); if (b < 10) { str += QString::number(b); } else { if (b == 10) str += "A"; if (b == 11) str += "B"; if (b == 12) str += "C"; if (b == 13) str += "D"; if (b == 14) str += "E"; if (b == 15) str += "F"; } } else { if (a == 10) str += "A"; if (a == 11) str += "B"; if (a == 12) str += "C"; if (a == 13) str += "D"; if (a == 14) str += "E"; if (a == 15) str += "F"; if (b < 10) { str += QString::number(b); } else { if (b == 10) str += "A"; if (b == 11) str += "B"; if (b == 12) str += "C"; if (b == 13) str += "D"; if (b == 14) str += "E"; if (b == 15) str += "F"; } } k = 0; } } ba = str.toLatin1(); ch = ba.data(); //ui->label_5->setText(str); serialM->write(ch);
来源:51CTO
作者:yang_xiaobai
链接:https://blog.csdn.net/yang_xiaobai/article/details/102721568