Italia
Java-Foro

Aiuto bei Umsetzung von Java codesnippet

 

Andre
Rohland
Hallo Amici,

ich stehe bei der Umsetzung eines Java-Quelltextes momentan ein wenig "auf dem Schlauch".

Im Grunde habe ich zwar schon ein paar Ideen:
- das "normale" Shifting in Java ( >> ) bedeutet, das z.B. beim Verschieben nach rechts um ein Bit links immer der Wert des vormals an der linken Stelle stehenden Bits eingesetzt wird.
- das "unsigned" Shifting ( >>> ) bedeutet, dass nicht der Wert des vormals an der linken Stelle stehenden Bits, sondern immer eine "0" eingesetzt wird.

Das ganze wäre wohl mit Aiuto der Zeichenkettenfunktionen (wenn auch etwas umständlich ) zu lösen, mächtiges Kopfzerbrechen bereitet mir aber die folgende Zeile:

boolean i = (dab & 0x01) == 0;

Vielleicht kennt einer von Euch ja Java ein wenig und kann mir da helfen...

Der Grund, warum ich das dringend bewerkstelligen muss ist, dass ich das Sekundarradar der Flugzeuge empfange, aber die in den ADSB-Telegrammen übermittelte Höhenangabe der Flugzeuge eine auf einem Luftdruck von 1013.2 mBar basierende barometrische Höhennangabe ist, die das Codesnippet angeblich in plausible Höhenangaben in Fuß (ft) mit einer Auflösung von 100 ft umrechnen können soll... .

Hier mal der originale Quelltext:
/**
* Method to convert octal data into an altitude with 100 foot resolution
*
* <p>Based on algorithm from Andy at Jetvision.de
*
* @param a an integer representing the first 3 bits
* @param b an integer representing the second 3 bits
* @param c an integer representing the third 3 bits
* @param d an integer representing the fourth 3 bits
* @return an int representing the altitude in feet with 100 foot resolution
*             or -9999 for error
*/

public int altitudeDecode(int a, int b, int c, int d) {

    int alt = 0;
    int dab = grayToBinary((d << 6) + (a << 3) + b);
    boolean i = (dab & 0x01) == 0;
    dab = (dab * 500) - 1000;

    if (i) {

        switch (c) {

            case 4:
            alt = dab + 200;
            break;
            case 6:
            alt = dab + 100;
            break;
            case 2:
            alt = dab;
            break;
            case 3:
            alt = dab - 100;
            break;
            case 1:
            alt = dab - 200;
            break;
            default:
            alt = -9999;

        }

    } else {

        switch (c) {

            case 4:
            alt = dab - 200;
            break;
            case 6:
            alt = dab - 100;
            break;
            case 2:
            alt = dab;
            break;
            case 3:
            alt = dab + 100;
            break;
            case 1:
            alt = dab + 200;
            break;
            default:
            alt = -9999;

        }

    }

    return alt;

}

/**
* Method to calculate altitude from Mode-C transponder type reply
* B[i] = XOR(B[i+1], G[i]) to convert Gray to binary
*
* <p>Based on an algorithm from Andy at Jetvision.de
*
* @param g an integer representing a gray code
* @return an integer representing the binary value of the given gray code
*/

private int grayToBinary(int g) {

    int val = g & 0x80;
    val = val | ((g & 0x40) ^ ((val & 0x80) >>> 1));
    val = val | ((g & 0x20) ^ ((val & 0x40) >>> 1));
    val = val | ((g & 0x10) ^ ((val & 0x20) >>> 1));
    val = val | ((g & 0x08) ^ ((val & 0x10) >>> 1));
    val = val | ((g & 0x04) ^ ((val & 0x08) >>> 1));
    val = val | ((g & 0x02) ^ ((val & 0x04) >>> 1));
    val = val | ((g & 0x01) ^ ((val & 0x02) >>> 1));
    return val;

}

 
02.10.2012  
 



Hi!

Ich habe Deinen Code mal in Code-Tags gepackt.

Das sollte man schon tun wenn man Fonte in Beiträgen postet.


... mächtiges Kopfzerbrechen bereitet mir aber die folgende Zeile:

boolean i = (dab & 0x01) == 0;


Diesen Operator verwendet man per binären UND-Vergleich,

quasi wird aus:


00010001 &
00000001 =
00000001


und wenn bei der obigen Zeile da null rauskommt (==0) dann ist i = true, andernfalls

false.
 
03.10.2012  
 




Andre
Rohland
Hallo iF,

erstmal sorry, hatte an die Code-Tags gar nicht mehr gedacht, ansonsten herzlichen Dank per Deinen Tip, jetzt wird es vielleicht "funktionuckeln"....
 
03.10.2012  
 



Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

4.500 Views

Untitledvor 0 min.
Sven Bader10.09.2021
E.T.16.06.2020
Peter Max Müller28.10.2017
iF12.03.2015
Di più...

Themeninformationen

Dieses Thema hat 2 subscriber:

Andre Rohland (2x)
iF (1x)


Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie