Hilfe beim erklären dieser Methode

Diskutiere Hilfe beim erklären dieser Methode im Java Basics - Anfänger-Themen Bereich.
Bluedaishi

Bluedaishi

Hallo ich soll als Aufgabe diese Methode erklären und komme damit überhaupt nicht klar.
Kann mir jemand dabei helfen?????

Java:
private static String calc_checksum(String daten) throws UnsupportedEncodingException {

        String checks = "00000000";
        String str = daten;

        long checksummeGes = 0L;
        long checksumme1 = 0L;
        long checksumme2 = 0L;
        long cutchecksumme1 = 0L;
        long cutchecksumme2 = 0L;
        long tmp1_1Sum = 0L;
        long tmp1_2Sum = 0L;
        long tmp1_3Sum = 0L;
        long tmp1_4Sum = 0L;
        long tmp2_1Sum = 0L;
        long tmp2_2Sum = 0L;
        long tmp2_3Sum = 0L;
        long tmp2_4Sum = 0L;
        String str1_1Sum = "";
        String str1_2Sum = "";
        String str1_3Sum = "";
        String str1_4Sum = "";
        String str2_1Sum = "";
        String str2_2Sum = "";
        String str2_3Sum = "";
        String str2_4Sum = "";

        byte[] bstr = new byte[str.length()];
        bstr = str.getBytes("UTF-8");

        boolean cnthigh = true;

        for (int i = 0; i < bstr.length; i++) {
            if (cnthigh) {
                checksumme1 += (bstr[i] & 0xFF);
                cnthigh = false;
            } else {
                checksumme2 += (bstr[i] & 0xFF);
                cnthigh = true;
            }

        }

        cutchecksumme1 = checksumme1 % 65536L;
        cutchecksumme2 = checksumme2 % 65536L;

        tmp1_1Sum = Math.abs(cutchecksumme1 / 4096L);
        cutchecksumme1 %= 4096;
        tmp1_2Sum = Math.abs(cutchecksumme1 / 256L);
        cutchecksumme1 %= 256;
        tmp1_3Sum = Math.abs(cutchecksumme1 / 16);
        cutchecksumme1 %= 16;
        tmp1_4Sum = Math.abs(cutchecksumme1);

        tmp2_1Sum = Math.abs(cutchecksumme2 / 4096L);
        cutchecksumme2 %= 4096;
        tmp2_2Sum = Math.abs(cutchecksumme2 / 256L);
        cutchecksumme2 %= 256;
        tmp2_3Sum = Math.abs(cutchecksumme2 / 16);
        cutchecksumme2 %= 16;
        tmp2_4Sum = Math.abs(cutchecksumme2);

        str1_1Sum = Long.toHexString(tmp1_1Sum).toUpperCase();
        str1_2Sum = Long.toHexString(tmp1_2Sum).toUpperCase();
        str1_3Sum = Long.toHexString(tmp1_3Sum).toUpperCase();
        str1_4Sum = Long.toHexString(tmp1_4Sum).toUpperCase();
        str2_1Sum = Long.toHexString(tmp2_1Sum).toUpperCase();
        str2_2Sum = Long.toHexString(tmp2_2Sum).toUpperCase();
        str2_3Sum = Long.toHexString(tmp2_3Sum).toUpperCase();
        str2_4Sum = Long.toHexString(tmp2_4Sum).toUpperCase();

        checks = str2_4Sum + str1_1Sum + str2_3Sum + str1_2Sum + str2_2Sum + str1_3Sum + str2_1Sum + str1_4Sum;

        return checks;

    }
bitte hilf mi einer :)
 
J

JustNobody

Also erst einmal würde ich den Code unterteilen in zwei Bereiche:

a) Der erste berechnet etwas in checksumme1 und checksumme2.

Dabei werden die Bytes abwechselnd der checksumme1 und checksumme2 zugerechnet.

Da bstr ein byte ist, sehe ich aber derzeit wenig Sinn in der UND Verknüpfung mit 0xff. bstr sollte immer gleich bstr & 0xff sein.

Dann %65536 -> Die Checksumme wird hier begrenzt. (Entspricht dann einem unsigned int aus 2 Bytes: Wertebereich 0 ... 65535).

b) Die beiden Zahlen von 0... 65535 werden nun unterteilt. Und zwar in 4 Blöcke. Ein Byte kann ja Hexadezimal mit zwei Ziffern dargestellt werden. Zwei Bytes a 2 Ziffern: Wir haben also die Aufteilung in die 4 Ziffern.

Und diese wollen wir dann natürlich nicht als Dezimale Zahl darstellen sondern als Hexadezimale Ziffer ...

Und dann fehlt natürlich noch die Rückgabe:
Und am Ende wird das dann als String zusammengesetzt und zurück gegeben...
 
Thema: 

Hilfe beim erklären dieser Methode

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben