Wie Java-Float lesen?

Anfängerfragen zum Programmieren mit PureBasic.
Syntacks_Error
Beiträge: 107
Registriert: 08.03.2009 16:08

Wie Java-Float lesen?

Beitrag 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?
Benutzeravatar
CSHW89
Beiträge: 489
Registriert: 14.12.2008 12:22

Re: Wie Java-Float lesen?

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

Re: Wie Java-Float lesen?

Beitrag 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.
Syntacks_Error
Beiträge: 107
Registriert: 08.03.2009 16:08

Re: Wie Java-Float lesen?

Beitrag 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
?
Benutzeravatar
CSHW89
Beiträge: 489
Registriert: 14.12.2008 12:22

Re: Wie Java-Float lesen?

Beitrag von CSHW89 »

ja
Bild Bild Bild
http://www.jasik.de - Windows Hilfe Seite
padawan hat geschrieben:Ich liebe diese von hinten über die Brust ins Auge Lösungen
Syntacks_Error
Beiträge: 107
Registriert: 08.03.2009 16:08

Re: Wie Java-Float lesen?

Beitrag von Syntacks_Error »

Die beste aller möglichen Antworten ;-)
Benutzeravatar
Darie
Beiträge: 204
Registriert: 14.09.2004 21:51

Re: Wie Java-Float lesen?

Beitrag von Darie »

Funktioniert der oben gezeigte Code auch für Doubles oder sieht der anders aus?

Mann, ist dat' heute Sommer 8)
Repeat
PureBasic
ForEver
Benutzeravatar
CSHW89
Beiträge: 489
Registriert: 14.12.2008 12:22

Re: Wie Java-Float lesen?

Beitrag 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
Bild Bild Bild
http://www.jasik.de - Windows Hilfe Seite
padawan hat geschrieben:Ich liebe diese von hinten über die Brust ins Auge Lösungen
Benutzeravatar
Darie
Beiträge: 204
Registriert: 14.09.2004 21:51

Re: Wie Java-Float lesen?

Beitrag von Darie »

Funktioniert soweit, leider fehlen aber die Nachkommastellen nach dem swappen.
Repeat
PureBasic
ForEver
Benutzeravatar
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?

Beitrag 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?
Antworten