Deutsch
Java-Forum

Hilfe bei Umsetzung von Java codesnippet

 

Andre
Rohland
Hallo Freunde,

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 Hilfe 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 Quelltexte in Beiträgen postet.


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

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


Diesen Operator verwendet man für 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 für Deinen Tip, jetzt wird es vielleicht "funktionuckeln"....
 
03.10.2012  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

4.483 Betrachtungen

Unbenanntvor 0 min.
Sven Bader10.09.2021
E.T.16.06.2020
Peter Max Müller28.10.2017
iF12.03.2015
Mehr...

Themeninformationen

Dieses Thema hat 2 Teilnehmer:

Andre Rohland (2x)
iF (1x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


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