Guten Tag
Ich wage mich seit einigen Tagen an Java, klappt bisher auch wirklich gut. Doch jetzt
bin ich an meine Grenzen gelangt, und hoffe dass mir hier jemand helfen kann.
Ich portiere gerade diverse Abschnitte von C# nach Java, wobei ich natürlich die
Datentypen beachte, die ja in Java alle (außer char) Vorzeichenbehaftet sind,
bei C# aber nicht alle (Vor allem der normale typ "byte" nicht).
Ich poste zuerst einmal die beiden Codeabschnitte und erzähle, was ich mir dabei gedacht habe.
Java
C#
Also zuersteinmal sei gesagt, dass m_raw[] und pak[] bei beiden Sprachen vom typ byte[] sind. Weshalb ich
bei Java auch mit "& 0xFF" das jeweilige auszulesende Byte als vorzeichenloses darstelle. Dazu habe ich jeweils
den nächstgrößeren Datentyp gewählt.
Nunja, das Ergebnis "checksum" unterscheidet sich allerdings. Und ab hier sehe ich den Wald vor lauter Bäumen nicht. Ich hoffe ihr habt eine Idee, die mir helfen könnte.
Ich wage mich seit einigen Tagen an Java, klappt bisher auch wirklich gut. Doch jetzt
bin ich an meine Grenzen gelangt, und hoffe dass mir hier jemand helfen kann.
Ich portiere gerade diverse Abschnitte von C# nach Java, wobei ich natürlich die
Datentypen beachte, die ja in Java alle (außer char) Vorzeichenbehaftet sind,
bei C# aber nicht alle (Vor allem der normale typ "byte" nicht).
Ich poste zuerst einmal die beiden Codeabschnitte und erzähle, was ich mir dabei gedacht habe.
Java
Code:
short one = 0x7E;
short two = 0x7E;
int i = 0;
int len = i + (m_raw.length - 2);
while (i < len) {
one += (short)(m_raw[i++] & 0xFF);
one = (short)(one & 0xFF); //Damit das "byte" auch ein "byte" bleibt, und nicht über seine Grenzen hinausschießt
two += one;
two = (short)(two & 0xFF); //Damit das "byte" auch ein "byte" bleibt, und nicht über seine Grenzen hinausschießt
}
int checksum = (int)(two - ((one + two) << 8)) & 0xFFFF; //Damit es ein "short" ohne vorzeichen ist
C#
Code:
byte val1 = 0x7E;
byte val2 = 0x7E;
int i = 0;
int len = i+(pak.Length-2);
while (i < len)
{
val1 += pak[i++];
val2 += val1;
}
ushort checksum = (ushort)(val2 - ((val1 + val2) << 8));
Also zuersteinmal sei gesagt, dass m_raw[] und pak[] bei beiden Sprachen vom typ byte[] sind. Weshalb ich
bei Java auch mit "& 0xFF" das jeweilige auszulesende Byte als vorzeichenloses darstelle. Dazu habe ich jeweils
den nächstgrößeren Datentyp gewählt.
Nunja, das Ergebnis "checksum" unterscheidet sich allerdings. Und ab hier sehe ich den Wald vor lauter Bäumen nicht. Ich hoffe ihr habt eine Idee, die mir helfen könnte.