# 8 Bit CRC-Check (Umsetzung C->Java)



## wildbret (2. Okt 2007)

Hallo, ich bin grade dabei ein Programm von C in Java umzusetzen und hänge an der Generierung des CRC-Bytes.

Mein Problem ist folgender Algorithmus. 
Wenn ich ihn richtig verstehe, dann prüft das IF in der Schleife, ob die erste Stelle des Bytes 1 ist. Wenn ja wird um 1 geschoben und das exklusiv oder gemacht. Wenn das erste Bit 0 ist wird nur geschoben. 
Das ganze logischerweise 8 mal bis das Byte durch ist.


```
BYTE CProtocoll::CRC_update(BYTE crc, BYTE data)
{
		crc = crc ^ data;
	for (int i = 0; i < 8; i++) {
		if (crc & 0x01)
			crc = (crc >> 1) ^ 0x8C;
		else
			crc >>= 1;
	}
	return crc;
}

BYTE CProtocoll::CRC_calculate(BYTE *p_Buffer,BYTE length)
{
	BYTE checksum = 0x00;

	for (int i=0; i<length; i++) { 
 		checksum=CRC_update(checksum,p_Buffer[i]); 
	}
	return checksum;
}
```

Nun zur meiner Umsetzung in Java


```
public int CRC_update(int crc, short data) {
	crc = crc ^ data;		
	for (int i = 0; i < 8; i++) {
		if (crc == 0x01) crc = (crc >> 1) ^ 0x8C; //Bitvergleich
		else crc >>= 1;
	}	
	return crc;
}
	
public int CRC_calculate(short p_Buffer[],short length) {		
	int checksum = 0x00;		
	for (int i=0; i<length; i++) { 
	checksum=CRC_update(checksum,p_Buffer[i]); 
	}
	System.out.println("Checksumme = "+checksum);
	return checksum;		
}
```
[/code]


----------



## wildbret (2. Okt 2007)

Sorry, aus Versehen den Beitrag abgesendet, bevor ich fertig war.
Wenn ich mich registriere kann ich dann meine Beiträge editieren?

Also das Problem ist der &-Operator im C-Quelltext den Java so nicht akzeptiert, weil IF Boolean zurückliefert, also true oder false.
Fehlermedlung: "Type mismatch: cannot convert from int to boolean"

Wie kann ich die Bits des Bytes crc einzeln vergleichen?


----------



## SlaterB (2. Okt 2007)

ja anmelden, dann editieren,

zum Vergleich brauchst du wohl eine Maske:
if (crc & 0x01 == 0xirgendwas)
oder generell
if (crc & 0x01 > 0)  // dann ist wohl irgendein Bit gesetzt


----------



## wildbret (2. Okt 2007)

Ok Danke dir, es scheint zu funktionieren und registriert bin ich jetzt auch.


----------

