AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Binärdateien einlesen: Problem mit umgedrehten Bytes
Thema durchsuchen
Ansicht
Themen-Optionen

Binärdateien einlesen: Problem mit umgedrehten Bytes

Ein Thema von Pvt. Joker · begonnen am 10. Dez 2008 · letzter Beitrag vom 11. Dez 2008
Antwort Antwort
Seite 1 von 2  1 2      
Pvt. Joker

Registriert seit: 10. Dez 2008
Ort: Aachen
5 Beiträge
 
#1

Binärdateien einlesen: Problem mit umgedrehten Bytes

  Alt 10. Dez 2008, 11:40
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Binärdateien einlesen: Problem mit umgedrehten Bytes

  Alt 10. Dez 2008, 11:41
Die Dateien scheinen in einem anderen ENDIAN Format vorzuliegen
Markus Kinzler
  Mit Zitat antworten Zitat
Pvt. Joker

Registriert seit: 10. Dez 2008
Ort: Aachen
5 Beiträge
 
#3

Re: Binärdateien einlesen: Problem mit umgedrehten Bytes

  Alt 10. Dez 2008, 11:44
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?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Binärdateien einlesen: Problem mit umgedrehten Bytes

  Alt 10. Dez 2008, 11:54
Sie unterscheiden sich in der Reihenfolge der Bytes
Markus Kinzler
  Mit Zitat antworten Zitat
Pvt. Joker

Registriert seit: 10. Dez 2008
Ort: Aachen
5 Beiträge
 
#5

Re: Binärdateien einlesen: Problem mit umgedrehten Bytes

  Alt 10. Dez 2008, 12:02
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?
  Mit Zitat antworten Zitat
BloodySmartie
(Gast)

n/a Beiträge
 
#6

Re: Binärdateien einlesen: Problem mit umgedrehten Bytes

  Alt 10. Dez 2008, 12:05
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.
  Mit Zitat antworten Zitat
Pvt. Joker

Registriert seit: 10. Dez 2008
Ort: Aachen
5 Beiträge
 
#7

Re: Binärdateien einlesen: Problem mit umgedrehten Bytes

  Alt 10. Dez 2008, 12:15
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.
  Mit Zitat antworten Zitat
Cyf

Registriert seit: 30. Mai 2008
407 Beiträge
 
Lazarus
 
#8

Re: Binärdateien einlesen: Problem mit umgedrehten Bytes

  Alt 11. Dez 2008, 00:09
Das könnte dir auch helfen:

Endian konvertieren
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#9

Re: Binärdateien einlesen: Problem mit umgedrehten Bytes

  Alt 11. Dez 2008, 08:55
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

Intel und AMD-CPUs (und damit alle modernen PC's und Macs) verwenden durchgehend Little-Endian.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Binärdateien einlesen: Problem mit umgedrehten Bytes

  Alt 11. Dez 2008, 09:04
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:26 Uhr.
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