【发布时间】:2020-01-23 21:19:40
【问题描述】:
我觉得这是一个愚蠢的问题,但我无法让它发挥作用,所以请多多包涵。 我想计算一个简单的校验和来检查我通过串行接收并存储在 QByteArray 中的数据是否没有损坏(或正确)。
我收到的数据包格式是这样的: // 数据包格式: // //|CHAR1|CHAR2|CLASS|ID|LENGTH|PAYLOAD|CK_A|CK_B|
// |
// |
// |
//|
有两个校验和CK_A和CK_B。每个都是一个字节长。校验和算法是 8-Bit Fletcher 算法:
CK_A = 0;
CK_B = 0;
for(i=0,i<n,i++){
CK_A = CK_A + Buffer[i];
CK_B = CK_B + CK_A;
}
我无法将存储在 QByteArray 中的十六进制值相加。这是我写的代码。它会增加值,但它们不正确并且代码很乱。
for(int I = 4; I < length + 4; I+=2){
tempHex[0] = serialData[I];
tempHex[1] = serialData[I + 1];
tempDec=tempHex.toInt();
CheckSum_A_int = (CheckSum_A_int + tempDec);
CheckSum_A_int &= 0xFF;
CheckSum_B_int = (CheckSum_B_int + CheckSum_A_int);
CheckSum_A_int &= 0xFF;
CK_A = CheckSum_A_int;
CK_B = CheckSum_B_int;
CK_A = CK_A.toLatin1().toHex();
CK_B = CK_B.toLatin1().toHex();
}
有没有人知道正确或更好的方法来做到这一点。或者有人可以向我解释如何将 QByteArray 的十六进制值相加吗?这是数据样本:“b56201241400009b4209d25e02009be0f8ffcc020407140d0000bd33”。 CK_A 应该是“bd”,CK_B 应该是“33”。
非常感谢您的耐心等待。 问候
【问题讨论】:
-
你使用什么协议?通常计算网络包的校验和不是你必须自己做的事情
-
ubx(ublox 二进制协议) 从 ublox M8P 应用板接收数据(GPS 数据)
标签: c++ qt checksum qbytearray