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!!
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!!