Unterschiedliche Ergebnisse bei Portierung einer Funktion von C/C++ in Java

Bloomi

Grünschnabel
Hallo,

ich habe ein Problem, da ich bei einer Portierung einer Funktion von C/C++ in Java falsche bzw. nicht die erwarteten Ergebnisse bekomme.

Bei folgender C/C++ Version bekomme ich die erwarteten Ergebnisse:

unsigned char CRC8;
//************************************************************
void CRC8_Init(void)
{
CRC8 = 0xC7;
}

//************************************************************
unsigned char Create_CRC8(unsigned char InByte)
{
unsigned char CRC8_Count;

CRC8 ^= InByte;
for(CRC8_Count=0;CRC8_Count<8;CRC8_Count++)
{
if(CRC8&0x80)
CRC8=(CRC8<<1)^0x1D;
else
CRC8<<=1;
}
return CRC8;
}

Bei folgendem Aufruf:
CRC8_Init();
Create_CRC8(55);
Create_CRC8(47);
ergebnis = Create_CRC8(0);
bekomme ich als ergebnis 200, was korrekt ist.

Hier nun die entsprechende Java Portierung die falsche bzw. nicht erwartete Ergebnisse liefert:

public CRC8()
{
this.crc8 = (byte)0xC7;
}

public byte CreateCRC8(byte inByte)
{
this.crc8 ^= inByte;

for(int crc8Count = 0; crc8Count<8; crc8Count++)
{
if( (this.crc8 & 0x80) != 0)
{
this.crc8 = (byte)((this.crc8 << 1) ^ 0x1D);
}
else
{
this.crc8<<=1;
}
}
return this.crc8;
}

Bei folgendem Aufruf:
CRC8 value = new CRC8();
byte i1 = value.CreateCRC8( (byte)55 );
byte i2 = value.CreateCRC8( (byte)47);
byte i3 = value.CreateCRC8( (byte)0);
hat dann der i3 den Wert 94 (er sollte 200 ( -55*) sein).

* Da unsigned char in C/C++ ja den Wertebereich 0-255 haben und byte in Java von -127 bis 127 so würde ich als Ergebnis -55 erwarten. Ich weiß leider nicht was ich falsch mache, bzw. wo ich falsch denke.

Bin für jegliche Unterstützung und Hilfe dankbar.

Allen hier im Forum einen Guten Rutsch!!
 
Ja du hast recht nen unsigned char passt eigentlich nicht in einen byte rein. Trotzdem ein byte zu nehmen dürfte deine Ergebnisse ziemlich verfälschen. Nimm doch einen short, da passt auch alles rein ;)
 
Danke für den Hinweis mit dem short, aber das hab ich selber schon ausprobiert, das Problem ist welches ich dann habe, sind die Shift Operationen die dann durchgeführt werden und nicht mehr passen.

Falls jemanden noch etwas einfällt, so ist diese Hilfe gerne willkommen! :)
 
Zurück