Seite 1 von 2
Wie Java-Float lesen?
Verfasst: 28.03.2011 19:34
von Syntacks_Error
Ich versuche eine mit Java geschriebene Binär-Datei zu lesen. Herausgefunden habe ich schon, daß ich da die Integer von Big Endian auf Small Endian ändern muß, was mit dieser netten Zeile von a14xerus
Zahl = ((Zahl&$FF)<<24)+((Zahl&$FF00)<<8)+((Zahl&$FF0000)>>8)+((Zahl>>24)&$FF)
(wie auch immer) prima klappt.
Wie geht das mit Floats? Die vier Bytes der Float in der Datei (mit readcharacter gelesen) sind z.B.
128/0/0/0
oder
190/174/20/0
oder
61/245/192/0
Wenn ich das mit readfloat lese, kommt immer "0" heraus, bei Integer gibt es ein Ergebnis, aber natürlich nicht das richtige, und obge Zeile funzt nicht, wenn Zahl eine Float ist - wie geht es richtig?
Re: Wie Java-Float lesen?
Verfasst: 28.03.2011 19:48
von CSHW89
Also Java verwendet für Floats auch den IEEE 754 Standard. Ich denke mal, dass es wie bei Integern ist, dass sie mit Small Edian gespeichert werden. Versuch mal das hier (nicht getestet):
Code: Alles auswählen
; statt
; Float.f = ReadFloat(__ID__)
; das hier:
Zahl = ReadLong(__ID__)
Zahl = ((Zahl&$FF)<<24)+((Zahl&$FF00)<<8)+((Zahl&$FF0000)>>8)+((Zahl>>24)&$FF)
Float.f = PeekF(@Zahl)
lg kevin
Re: Wie Java-Float lesen?
Verfasst: 28.03.2011 20:00
von Syntacks_Error
Vielen Dank, zumindest kommt schon mal eine mächtig krumme Zahl heraus. Ob es die richtige ist, werde ich aber wohl erst in ein paar Stunden feststellen - ein Java-Programm zu übersetzen ist gar nicht so einfach, wenn man kein Java kann

Sieht jedenfalls schon mal gut aus.
Re: Wie Java-Float lesen?
Verfasst: 28.03.2011 20:22
von Syntacks_Error
Weil das so gut geklappt hat, hier gleich noch eine Java-Frage:
Übersetze ich diesen Schnippsel
i1 = j1 > 0 ? 1 : -1
richtig mit
?
Re: Wie Java-Float lesen?
Verfasst: 28.03.2011 20:27
von CSHW89
ja
Re: Wie Java-Float lesen?
Verfasst: 28.03.2011 20:35
von Syntacks_Error
Die beste aller möglichen Antworten

Re: Wie Java-Float lesen?
Verfasst: 18.06.2013 16:41
von Darie
Funktioniert der oben gezeigte Code auch für Doubles oder sieht der anders aus?
Mann, ist dat' heute Sommer

Re: Wie Java-Float lesen?
Verfasst: 18.06.2013 22:31
von CSHW89
Auch wieder ungetestet:
Code: Alles auswählen
Zahl.q = ReadQuad(__ID__)
Zahl = ((Zahl&$FF)<<56)+((Zahl&$FF00)<<40)+((Zahl&$FF0000)<<24)+((Zahl&$FF000000)<<8)+((Zahl&$FF00000000)>>8)+((Zahl&$FF0000000000)>>24)+((Zahl&$FF000000000000)>>40)+((Zahl>>56)&$FF)
Double.d = PeekD(@Zahl)
lg Kevin
Re: Wie Java-Float lesen?
Verfasst: 19.06.2013 12:27
von Darie
Funktioniert soweit, leider fehlen aber die Nachkommastellen nach dem swappen.
Re: Wie Java-Float lesen?
Verfasst: 19.06.2013 13:07
von NicTheQuick
Welches Swappen und welche Nachkommastellen?
Bist du dir sicher, dass die Double-Variable auch richtig in einen String umwandelst mit 'StrD()' und entsprechend anzeigst?