2016-06-01 18 views
0

Ich habe eine Datei, die von einem visuellen Basisprogramm erstellt wurde, das ich vor Jahren geschrieben habe. Ich versuche, diese Daten zu konvertieren, damit ich es in einem Ersatz-Java-Programm lesen kann, das ich auch geschrieben habe. Ich habe Probleme, das VB-Datum zu konvertieren, das ein 8-Byte-Doppel ist. Ich habe this Thread gelesen. Durch die Schritte kann ich das Datum manuell konvertieren (0x00000000E080E440) (18.12.2014). Little Endian zu Big Endian Dezimal = 4.1991E4, welches 41991 das korrekte Datum darstellt. Jetzt versuche ich dies in Java zu schreiben. Der andere Beitrag Referenzen Code für den Austausch, und ich habe diesen Code gerupft:So lesen Sie das Datum aus der VB-Binärdatei in Java

/** 
    * Byte swap a single double value. 
    * 
    * @param value Value to byte swap. 
    * @return  Byte swapped representation. 
    */ 
    public static double swap (double value) 
    { 
    long longValue = Double.doubleToLongBits (value); 
    longValue = swap (longValue); 
    return Double.longBitsToDouble (longValue); 
    } 

Dieser Code nicht kompiliert. Ich lerne nur Java, also ertragen Sie mit mir. Dieser Code sieht so aus, als ob er sich rekursiv selbst aufruft, aber wenn er sich selbst (swap) nennt, übergibt er longValue, was lang ist, wenn swap doppelt erwartet wird. Fehle ich etwas? Wie kann ich die Bytes von Little Endian zu Big tauschen?

Antwort

0

Der Code ruft sich nicht selbst auf. Es ruft eine Methode swap(long longValue) auf, und Ihre Methode ist swap(double value). Es kompiliert wahrscheinlich nicht, weil Sie die andere Methode nicht haben.

+0

Ich bekomme die Nachricht, "Inkompatible Typen: mögliche verlustbehaftete Konvertierung von Double zu Long. Die Methode Swap wird unendlich recurse." –

+1

Der Compiler sucht nach einer Methode 'swap (long longvalue)' '; Da es keins findet, geht es davon aus, dass Sie das Double in ein Long konvertieren und die Routine aufrufen möchten, die Sie haben. Ich wiederhole, es gibt wahrscheinlich eine Methode, um die Bytes für eine lange umzukehren, die Sie nicht in Ihrem Code haben, und deshalb ist dieser Code fehlerhaft, löst diese Kompilierungsnachricht aus und wird nicht funktionieren. Geh zurück zu dem Punkt, an dem du diesen Code ausgewählt hast und sieh nach, ob er nicht die fehlende Methode hat. – arcy