Prüfsumme berechnen

10/02/2008 - 11:59 von Christian Havel | Report spam
Hi,

bei der Berechnung der Prüfsumme stehe ich gerade auf dem Schlauch.
|<-- Checksum: XOR -->|
<Sync_1>, <DEV_ADR>, <Cmd>, <Option>, [<DATA>], <Cksum>, <Sync_2>

Sync_1 = 0x81 und Sync_2 = 0x82
Meine Berechnung:

byte[] buffer = new byte[] { 0x81, 0x00, 0x4D, 0x53, 0x45, 0x5A, 0x82 };

byte crc = buffer[0];
int length = buffer.Length - 2; // without Cksum and Sync_2

for (int counter = 0; counter < length; counter++)
{
crc ^= bufferToCalculateCRC[counter];
}

Als Ergebnis erhalte ich 0x5b. Was mache ich falsch?
Christian
 

Lesen sie die antworten

#1 Frank Dzaebel
10/02/2008 - 14:44 | Warnen spam
Hallo Christian,

bei der Berechnung der Prüfsumme stehe ich gerade auf dem Schlauch.
[...] Meine Berechnung: ...
Als Ergebnis erhalte ich 0x5b. Was mache ich falsch?



Was soll denn herauskommen.
Das letzte Byte (Sync_2) soll wohl nicht ge-XOR'd werden.
Bzgl. des ersten Bytes weiss ich nicht genau, ob Du es mit
ge-XOR'd haben möchtest, also zwei Alternativen:

(1) Mit Berücksichtigung des ersten Bytes(Sync_1)
Ergebnis => crc==0x80:

byte[] buffer = new byte[] { 0x81, 0x00, 0x4D, 0x53, 0x45, 0x5A, 0x82 };
byte crc = buffer[0]; int length = buffer.Length-1;
for (int counter = 1; counter < length; counter++)
crc ^= buffer[counter];


(2) Ohne Berücksichtigung des ersten Bytes(Sync_1)
Ergebnis => crc==0x01:

byte[] buffer = new byte[] { 0x81, 0x00, 0x4D, 0x53, 0x45, 0x5A, 0x82 };
byte crc = buffer[1]; int length = buffer.Length-1;
for (int counter = 2; counter < length; counter++)
crc ^= buffer[counter];


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen