Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Binärdateien einlesen: Problem mit umgedrehten Bytes (https://www.delphipraxis.net/125713-binaerdateien-einlesen-problem-mit-umgedrehten-bytes.html)

Pvt. Joker 10. Dez 2008 10:40


Binärdateien einlesen: Problem mit umgedrehten Bytes
 
Hallo alle zusammen,

ich habe bisher leider nirgends eine Antwort zu meinem Problem im Internet gefunden, daher wende ich mich an Euch. Vielen Dank schon mal vorab.

Problem:

Ich möchte mit Delphi eine Binärdatei einlesen, die aus Messdaten besteht. Diese Messdaten umfassen 3D-Knoten. Jeder Knoten belegt dabei jeweils als double 8 Byte für die x-,y- und z-Koordinate. Sprich ein Knoten/Datensatz/Zeile besteht aus 3 * 8 Byte. Anschließend sollen die Daten dann wieder als Textdatei ausgegeben werden.

Soweit so gut, das mit dem einlesen und ausgeben ist eigentlich nicht das Problem, sondern die Tatsache, dass Delphi anscheinend die Bytes falsch herumließt.

Nehmen wir mal ein Beispiel:

Nach IEEE 754 gilt:
Dezimalzahl: 10
Hexadezimal: 40 24 00 00 00 00 00 00
Binärzahl: 0 | 100 0000 0010 | 0100 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
Unterteilung: Vorzeichen | Exponent | Mantisse

Mein Delphi macht daraus aber, obwohl es angeblich auch nach IEEE 754 arbeitet:
Dezimalzahl: 10
Hexadezimal: 00 00 00 00 00 00 24 40
Beinärzahl: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0010 0100 0100 0000
Unterteilung: ???


Jetzt frage ich micht schon die ganze Zeit, ob das an der verwendeten Hardware, an dem Betriebssystem oder vielleicht an irgendeiner Einstellung von Delphi liegt? Wenn nicht, ist dann halt die Frage, ob es einen Befehlt gibt, der das ganze vielleicht automatisch umdreht?

Naja, wenn es da nichts gibt, werde ich mir wohl die Arbeit machen und selbst eben etwas schreiben, was mir die Doubles Byteweise umdreht, wobei das bei den großen Dateien natürlich viel Extra-Rechenzeit kosten wird.

MFG

Pvt. Joker

mkinzler 10. Dez 2008 10:41

Re: Binärdateien einlesen: Problem mit umgedrehten Bytes
 
Die Dateien scheinen in einem anderen ENDIAN Format vorzuliegen

Pvt. Joker 10. Dez 2008 10:44

Re: Binärdateien einlesen: Problem mit umgedrehten Bytes
 
Ja, hab ich auch erst gedacht, aber Big und Little Endian unterscheiden sich doch nur in der Anordnung der Mantisse, oder habe ich das etwas falsch verstanden?

mkinzler 10. Dez 2008 10:54

Re: Binärdateien einlesen: Problem mit umgedrehten Bytes
 
Sie unterscheiden sich in der Reihenfolge der Bytes

Pvt. Joker 10. Dez 2008 11:02

Re: Binärdateien einlesen: Problem mit umgedrehten Bytes
 
Ok, das wäre ja dann genau mein Problem, kann ich Delphi irgendwie sagen, dass er die Bytes direkt umgekehrt (also mit Little Endian) einlesen kann?

BloodySmartie 10. Dez 2008 11:05

Re: Binärdateien einlesen: Problem mit umgedrehten Bytes
 
Möglicherweise kann Dir dieser Artikel eine Anregung sein:
Converting Double Types from Little Endian to Big Endian
oder dieser Beitrag:
DP: Little-Endian-DWord zu Integer und zurück

Andererseits könntest Du auch nach dem Einlesen Deinen Puffer recht einfach so reorganisieren, dass Du brauchbare Daten hast. Schau Dir dazu auch mal den Wikipedia-Artikel "Byte-Reihenfolge" an.

Pvt. Joker 10. Dez 2008 11:15

Re: Binärdateien einlesen: Problem mit umgedrehten Bytes
 
Vielen Dank,

meine Befürchtung, alle Bytes von Hand umdrehen zu müssen, scheinen sich damit aber zu bestätigen. Schade eigentlich, dass man Delphi nicht direkt per Optionsklick irgendwo sagen kann, lies bitte als BigEndian ein bzw. irgendwo eine Variabel (ähnlich dem DezimalSeparator) umstellen kann auf BigEndian.

Cyf 10. Dez 2008 23:09

Re: Binärdateien einlesen: Problem mit umgedrehten Bytes
 
Das könnte dir auch helfen:

Endian konvertieren

jfheins 11. Dez 2008 07:55

Re: Binärdateien einlesen: Problem mit umgedrehten Bytes
 
Zitat:

Zitat von Pvt. Joker
Vielen Dank,

meine Befürchtung, alle Bytes von Hand umdrehen zu müssen, scheinen sich damit aber zu bestätigen. Schade eigentlich, dass man Delphi nicht direkt per Optionsklick irgendwo sagen kann, lies bitte als BigEndian ein bzw. irgendwo eine Variabel (ähnlich dem DezimalSeparator) umstellen kann auf BigEndian.

Kauf dir ne Power-PC-CPU wenn du umschalten willst :gruebel:

Intel und AMD-CPUs (und damit alle modernen PC's und Macs) verwenden durchgehend Little-Endian.

SirThornberry 11. Dez 2008 08:04

Re: Binärdateien einlesen: Problem mit umgedrehten Bytes
 
so viel musst du doch gar nicht ändern. Irgendwo hast du ja deinen Aufruf zum lesen. Und diesen Aufruf änderst du um so das eine andere Funktion aufgerufen wird die das ursprüngliche macht + die Bytes zu tauschen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:30 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz