W
wildbret
Gast
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.
Nun zur meiner Umsetzung in Java
[/code]
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.
Code:
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
Code:
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;
}