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

Code: Alles auswählen

if j1 > 0
  i1 = 1
else
  i1 = -1
endif
?

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 8)

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?