Bytewerte darstellen als Integer und Double

  • Servus, habe wieder mal ein kleines Problem.

    Undzwar versuche ich nach dem Schema (siehe Bild), die Werte aus einer Datei korrekt darzustellen.
    von 9994 bis 106 ist auch alles korrekt aber dann ändert sich die Bytesortierung von BIG auf Little..

    Erbitte Rat

  • Hi Kizum !

    Ich verstehe nicht ganz, worauf Du hinaus willst :/

    In der Schleife : For $i = 1 to 56 step + 8 ...

    interpretierst Du die ersten 7 Teilstrings (Länge 8 )mit DEC von Hex zu Dezimal.

    In der Schleife : For $i = 57 to 200 step +8 ...

    gibst Du einfach nur 18 weitere Teilstrings aus.

    Nebenbei :

    DEC ohne zweiten Parameter verwendet signed-Integer, d.h. Werte von -2.147.483.648 bis 2.147.483.647 .

    Bei Element 8, also E8030000, würde es so zu einem Überlauf kommen (da dezimal = 3.892.510.720) !

    -> Ausgabe = -402.456.576 -> siehe $NUMBER_64BIT (2)

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Hi,

    und wo ist jetzt das Problem?

    von 9994 bis 106 ist auch alles korrekt

    Auch danach ist alles "korrekt" es ändert sich lediglich die sog. "Endianess". Schau mal HIER, ob du damit weiter kommst

  • Element8 ist aber little Endian bzw. sollte so interpretiert werden.

    Wenn ich aber die ganze Datei als utf16 BE = ($f) einlese, stimmen die Werte natürlich nicht mehr.

    Als DEC kommt da nur Quatsch raus.


    Element8 sollte den Wert 1000 haben.

  • Element8 sollte den Wert 1000 haben.

    In Little-Endian entspricht E8 03 00 00 dem Dezimalwert 1000, soweit also korrekt. Ich weiß allerdings nicht, wie deine Datei aufgebaut ist. In deinem Beispielcode gibt es nur den String, bestehend aus 4-Byte Sequenzen.

    Falls hier Big- und Little-Endian gemischt auftreten, sehe ich keine Logik diese zu unterscheiden.

    Beide Interpretationen liefern ja sinnvolle Dezimalergebnisse.

    Wäre nicht ggf. eine Hilfstabelle (Array) sinnvoll, also :

    Element 1 = Big-Endian

    Element 2 = Big-Endian

    Element 3 = Litte-Endian

    Element 4 = Big-Endian

    etc.

    Dann könntest Du die jeweiligen Elemente bei Bedarf konvertieren.

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Es ist eine Shapedatei welche zum visualisieren von Linien, Punkten und Polygonen in geeigneter Software ist.

    Diese Daten möchte ich nun numerisch Darstellen.

    Hier ist eine PDF welche den gesamten Dateiaufbau beschreibt shape

    An dem Konvertieren scheitere ich gerade. Dachte ich Reverse einfach und geben dann als DEC(x, 3) aus, ist aber auch Quatsch

    Die Datei habe ich mal angehängt

  • so müsste das passen...

    Bei Little Endian dreht sich die Bytefolge um, man schreibt die Bytes also umgekehrt in eine 8 Byte große Bytestruct, erstellt an deren Adresse eine Doublestruct (auch 8 Bytes groß) und liest diese aus^^

    //EDIT

    Da würde sich eine Funktion lohnen, die Anhand der übergebenen Bytes, des Typs und der Endianess den Rückgabewert ermittelt...

    Habe gerade mal die PDF durchgeblättert, es sieht so aus, als ob alle Daten bis auf die ersten Werte (die sind in Big Endian) des Headers in Little Endian interpretiert werden müssen

    ciao
    Andy


    "Schlechtes Benehmen halten die Leute doch nur deswegen für eine Art Vorrecht, weil keiner ihnen aufs Maul haut." Klaus Kinski
    "Hint: Write comments after each line. So you can (better) see what your program does and what it not does. And we can see what you're thinking what your program does and we can point to the missunderstandings." A-Jay

    Wie man Fragen richtig stellt... Tutorial: Wie man Script-Fehler findet und beseitigt...X-Y-Problem

    4 Mal editiert, zuletzt von Andy (23. Oktober 2018 um 21:01)

  • Stimmt, dann wäre ein FileOpen = LE am Anfang vielleicht ganz sinvoll und die erstens bytes (BE) könnte man ja dann Konvertieren.

    Auf jedenFall schon mal vielen Dank an dieser Stelle, war schon ein wenig traumatisiert, das bringt mich schon mal um einiges weiter, werde den Code mal studieren.