binäre Dateien öffnen [erledigt]

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Thunder

Betreff: binäre Dateien öffnen [erledigt]

BeitragMi, März 18, 2009 16:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe ja schon öfter versucht binäre Dateien mit meinem Blitzbasic zu öffnen. Zuerst dachte ich es ist ganz einfach, ich muss doch nur Byte für Byte aus einer Datei auslesen und das Byte ins Hexadezimalsystem umwandeln. Ich weiß zwar nicht ob es richtig ist, aber es dauert mir viel zu lange. Weiß einer von euch wie soetwas schneller oder besser geht?
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit
  • Zuletzt bearbeitet von Thunder am Mi, März 18, 2009 17:04, insgesamt einmal bearbeitet

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMi, März 18, 2009 16:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Da gibt es noch ReadBytes. Müsste mit die schnellste Methode Daten in den Speicher mit Blitz-Bordmitteln zu laden sein. Die Daten müssen dann weiter verteilt werden.

Aber ich verstehe nicht, wie die üblichen Lesebefehle ''langsam'' sein sollen. Was machst du denn für Sachen? Lädst du da 10MB in den Speicher, oder was?

Zum auslesen der Bytes muß im übrigen nichts in Hexadezimalsystem umgewandelt werden. Die Bytes sind Bytes und können auch als solche an Ganzzahlen (Integer%) oder Fliesskomma (Floats#) übergeben werden. Etwas (wirklich geringfügig) schneller als Bytes in Integer zu übertragen ist allerdings das übertragen von integer Zahlen. Auch wenn mehr Daten bearbeitet werden müssen.

Ansonsten gib uns Code, dann können wir eventuell auch den Fehler finden, anstelle ewig rum zu spekulieren.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Thunder

BeitragMi, März 18, 2009 17:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Aber ich verstehe nicht, wie die üblichen Lesebefehle ''langsam'' sein sollen. Was machst du denn für Sachen? Lädst du da 10MB in den Speicher, oder was?

Naja, eigentlich nur 1,29 MB...

Zitat:
Zum auslesen der Bytes muß im übrigen nichts in Hexadezimalsystem umgewandelt werden

Ich meinte zum ausgeben, damit sie Hexadezimal ausgegeben werden.

Aber mit Readbytes funktioniert es jetzt schon
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit
 

da_poller

BeitragMi, März 18, 2009 17:24
Antworten mit Zitat
Benutzer-Profile anzeigen
anders als mittels Hex fällt mir nix ein..

the FR3AK

BeitragMi, März 18, 2009 17:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Man muss die bytes in integer umwandeln und den Integer in Hex...
 

da_poller

BeitragMi, März 18, 2009 17:32
Antworten mit Zitat
Benutzer-Profile anzeigen
zahl=hex(readbyte(datei))

was is daran nun falsch?

Jan_

Ehemaliger Admin

BeitragDo, März 19, 2009 10:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Zeig mal deinen Code...
between angels and insects

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDo, März 19, 2009 11:45
Antworten mit Zitat
Benutzer-Profile anzeigen
da_poller, was soll denn deine Zeile da bewirken? Bevor man das nicht weiß, kann man auch nicht sagen was daran falsch ist. Generell haben eventuell einige hier ein falsches Bild davon, wie ein Computer arbeitet.

Der Computer rechnet nicht im dezimalem Zahlensystem, aber auch nicht hexadezimalem Zahlensystem. Der Rechner rechnet einzig und allein mit dem Biärsystem. Alles was man als Programmierer so eingibt X=X+100 wird intern vom Precompiler in eine Binärzahl umgewandelt. Das wäre dann +00000000000000000000000001100100. Erst mit dieser Zahl kann der Rechner dann tatsächlich weiter arbeiten. Das hexadezimale Zahlensystem wurde dafür entwikelt um den Menschen eine bessere Basis zu geben mit dem Computer zu komunizieren. Da das hexadezimale Zahlensystem dem dezimalen Zahlensystem recht ähnlich ist (ähnliche Ziffernzahl) und somit vom Menschen besser erfasst werden kann. Gleichzeitig entspricht eine Hex-Ziffer 4 Bin-Ziffern. Man kann also parallel arbeiten, was mit dem Dec-System auf Bin-System nicht geht.

Im übrigen liefert Hex ein String, der unmöglich in der Form als Zahl richtig intepretiert werden kann.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

the FR3AK

BeitragDo, März 19, 2009 12:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Könnte man Theoretisch eine Binäre Datei einlesen (in eine Bank) dann die einzelnen Bytes in Hex-Umwandeln (mit der Hex(int) Funktion) und anschliessend diese Hex-Werte in eine Datei schreiben? Das wäre dann ja eigentlich ein Hex-"Editor" oder? Aber wie mache ich die ganze Sache dann rückwarts?

D2006

Administrator

BeitragDo, März 19, 2009 12:51
Antworten mit Zitat
Benutzer-Profile anzeigen
@the FR3AK:
Lies dir bitte mal hectics Beitrag über deinem durch. Du scheinst das nicht verstanden zu haben.
Hex-Editoren heißen Hex-Editoren weil sie den Inhalt von Dateien als Hexzahlen darstellen. Das Stichwort "Darstellung" ist gut, denn nichts anderes sind Zahlensystem (binär, hex, dezimal, usw...) Es sind einfach nur verschiedene Arten eine Zahl darzustellen. In der Datei stehen sie letztendlich eh immer als Einsen und Nullen.

Warum heißt es dann Binärdaten?
Man unterscheidet grundsätzlich zwischen Binär- und Textdateien. Ich kann zum Beispiel ein Level auf zwei Arten speichern. Als eine Art XML, die ungefähr so aussieht:Code: [AUSKLAPPEN]
<?xml version="1.0" ?>
<map>
   <title>Testmap - 1</title>
   <object>
      <name>obj1</name>
      <vert>
         <up>110.000000</up>
         <down>0.000000000</down>
         <pos>0.000000000</pos>
      </vert>
      <vert>...


Oder in Binärdaten, da sieht dann zB so aus:
Code: [AUSKLAPPEN]
$~¿ôÐ11Mî¸hâ¹è;OogµY¢q€ ¿Ù¤>Y÷8†Ë8¨òéú>XÀ»,›ù¢ÆÑKÇ¡´‹¸W7"™Óø–8öšœÍr-r1ù±”öRŠQ¸x“z?ÙGô+SÕ¿ì’ZÞ?tlhKó‚åe£ƒº/×ñkµ~rõ}ÜHA¸™Pu•q>k®%'mÞHÇÖyYGëG:$ùÙ˜
³$BÂÇÀ´@Æîâ·¢!PŸŸ£»ÀÿF*k<ÑLtHJ´þÀã2¿Iýæùy1Ðñ’„;mµø%dÓBÉ$o¨ÆÌÈu¯Ú‹Ëg~YÝs=<–èy"åÑ_[©¯=>TþL•QÈùãäãý:^1^¼x†*{KŒž/îµØ³
Man erkennt sofort: Textdateien sind in menschenlesbarer Form, was eine schnellere Manipulation erlaubt. Sie brauchen aber auch viel mehr Platz, denn in binärform kann man Daten viel kompakter abspeichern. Speichere ich die Zahl 222 in einer Textdatei ab, brauche ich dafür 3 Zeichen und somit 3 Byte. Dasselbe binär braucht aber nur 1 Byte. ReadLine und WriteLine benötigt man für Textdateien. ReadByte usw. für Binärdateien. Alle Klarheiten beseitigt?
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group