Hier ist HEX-Zeichenfolge: 57 F1 0F 9A A8 B7 00 08 0B 19 10 00 00 00 00 00 11 0B 15 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00Prüfsumme für HEX-Zeichenfolge Python
A8 und B7 eine Prüfsumme ist, die i
In C es so berechnet berechnen müssen (100% gearbeitet):
void ByteStream_ComputeCS(void)
{
int i;
DWORD cs = 0;
for (i = 0; i < ByteStream[2] + 3; i++)
{
if (i != 2) cs += *((WORD*)ByteStream + i);
}
cs = (cs & 0xFFFF) + (cs >> 16);
ByteStream[4] = (BYTE)cs;
ByteStream[5] = (BYTE)(cs >> 8);
}
Im Versuch, es so zu tun:
data = bytearray.fromhex('57 F1 0F 9A 00 00 00 08 0B 19 10 00 00 00 00 00 11 0B 15 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00')
c_sum = sum(data)
I mit 0 nur Prüfsumme ersetzen - in C seine gerade nicht
if (i != 2) cs += *((WORD*)ByteStream + i);
Aber ich 0x25e erhalten summieren. Und kann es nicht zu A8 und B7 bekommen. Was mache ich falsch?
Sie machen verschiedene Dinge. Der C-Code ist eine Additions-Summe von Wörtern (vermutlich auch 16 Bit), wobei das Wort übersprungen wird, wo die Prüfsumme liegt, und ein Längenwert in den Daten verwendet wird. (Sieht ein bisschen wie eine IPv4-Prüfsumme aus.) Der Python-Code ist eine Summe von Bytes. Sie sollten in Struktur- oder Array-Module schauen. Außerdem haben Sie für uns nie definiert, was DWORD, WORD oder BYTE sind. Beispiel: 'hex (sum (array.array ('H', buffer (data)))) ' –
Ich habe meinen Fehler und mein Problem gefunden: ich summe 57 + F1 + 0F + 9A + ... aber summiere 57F1 + 0F9A + .... Die Lösung fand ich ist hex-String in Bytes auf diese Weise zu konvertieren: def HexToByte (hexStr): Bytes = [] hexStr = '' .join (hexStr.split (“„)) für i im Bereich (0, len (hexStr), 4): bytes.append (int (hexStr [i: i + 4], 16)) return Bytes und sUM es dann. Aber gibt es einen anderen Weg? –