Wie Java-Float lesen?
-
- Beiträge: 107
- Registriert: 08.03.2009 16:08
Wie Java-Float lesen?
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?
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?
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):lg kevin
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)



http://www.jasik.de - Windows Hilfe Seite
padawan hat geschrieben:Ich liebe diese von hinten über die Brust ins Auge Lösungen
-
- Beiträge: 107
- Registriert: 08.03.2009 16:08
Re: Wie Java-Float lesen?
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.

-
- Beiträge: 107
- Registriert: 08.03.2009 16:08
Re: Wie Java-Float lesen?
Weil das so gut geklappt hat, hier gleich noch eine Java-Frage:
Übersetze ich diesen Schnippsel
i1 = j1 > 0 ? 1 : -1
richtig mit
?
Ü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?
ja



http://www.jasik.de - Windows Hilfe Seite
padawan hat geschrieben:Ich liebe diese von hinten über die Brust ins Auge Lösungen
-
- Beiträge: 107
- Registriert: 08.03.2009 16:08
Re: Wie Java-Float lesen?
Die beste aller möglichen Antworten 

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

Repeat
PureBasic
ForEver
PureBasic
ForEver
Re: Wie Java-Float lesen?
Auch wieder ungetestet:
lg Kevin
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)



http://www.jasik.de - Windows Hilfe Seite
padawan hat geschrieben:Ich liebe diese von hinten über die Brust ins Auge Lösungen
Re: Wie Java-Float lesen?
Funktioniert soweit, leider fehlen aber die Nachkommastellen nach dem swappen.
Repeat
PureBasic
ForEver
PureBasic
ForEver
- NicTheQuick
- Ein Admin
- Beiträge: 8809
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: Wie Java-Float lesen?
Welches Swappen und welche Nachkommastellen?
Bist du dir sicher, dass die Double-Variable auch richtig in einen String umwandelst mit 'StrD()' und entsprechend anzeigst?
Bist du dir sicher, dass die Double-Variable auch richtig in einen String umwandelst mit 'StrD()' und entsprechend anzeigst?