Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Westbeam

Anmeldungsdatum: 22.12.2009 Beiträge: 760
|
Verfasst am: 06.11.2011, 20:38 Titel: Datei Header auslesen |
|
|
Hallo
Ich schreibe gerade an einem Programm, welches eine .GBA Datei ausliest. Dafür brauche ich die Daten aus dem Header. Ich habe die Datei vorher mit einem Hex-Editor geöffnet und herausgefunden, dass der Name des Spiels bei Offset 108-11E liegt. Nun wollte ich den Namen des Spiels auslesen, also mache ich folgendes:
Code: | Dim As String nam
Dim As Integer ff = Freefile
Open "pkmn.gba" For Input As #ff
Get #ff, 108, nam
Print nam
Close #ff |
Dummerweise kommt dabei nichts raus, also wirklich gar nichts.
Dabei ist das das gleiche Vorgehen, wie wenn ich die Auflösung eines BMP-Bildes herausfinden möchte, was aber funktioniert(Link)
Kann mir jemand weiterhelfen? Kann man überhaupt einen Wert aus einer Datei herauslesen, welcher sich über mehrere Offsets verteilt?
Danke für jede Hilfe
EDIT: Habs raus:
Code: | Type THeader
As String nam,shortnam
As Byte namoffset(12)
End Type
Dim Shared As THeader Header
Dim As Integer ff = Freefile
Open "pkmn.gba" For Binary As #ff
For i As Integer=1 To 12
Get #ff,&hA0+i,Header.namoffset(i)
Header.shortnam+=Chr(Header.namoffset(i))
Next
Print Header.shortnam
Close #ff |
|
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 06.11.2011, 22:24 Titel: Re: Datei Header auslesen |
|
|
Westbeam hat Folgendes geschrieben: | Dim As String nam
Get #ff, 108, nam |
Entweder du musst einen String mit fixer Länge deklarieren, oder du blähst den String vorher auf eine bestimmte Länge auf, oder du nimmst gleich ZStrings. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
Westbeam

Anmeldungsdatum: 22.12.2009 Beiträge: 760
|
Verfasst am: 06.11.2011, 22:27 Titel: |
|
|
Ich habe die Offsets jetzt als Bytes deklariert, sowie im zweiten Code in meinem ersten Post.  |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 06.11.2011, 22:30 Titel: |
|
|
Das ist aber umständlich.
Dim as ZString * 12 name und fertig. Der Name wird vermutlich eh nullterminiert sein, d.h. er wird dann auch wirklich korrekt verarbeitet. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
Westbeam

Anmeldungsdatum: 22.12.2009 Beiträge: 760
|
Verfasst am: 06.11.2011, 22:35 Titel: |
|
|
Ich bin mir nicht sicher, wie du das meinst. Wie soll es denn genau mit ZString funktionieren? |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 06.11.2011, 22:40 Titel: |
|
|
Code: | Dim as ZString * 12 name
Get #ff,&hA0,name |
Wenn der String kürzer als 12 Zeichen ist und durch ein NULL terminiert wird (so wie man das aus der Welt der Dateiformate halt gewohnt ist), wird auch nur der Teil des Strings bis zum Nullzeichen dargestellt. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 06.11.2011, 23:40 Titel: |
|
|
wenn er sagt Offsets 108-11E, dann sollte er vermutlich weder 108 noch &hA0 sondern &h108 schreiben? _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 07.11.2011, 08:31 Titel: |
|
|
... und um genau zu sein &H109, denn bei FB beginnen die Dateioffsets warum auch immer bei 1, und nicht bei 0, wie bei den meisten Hex-Editoren und anderen Programmiersprachen...  _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 07.11.2011, 11:16 Titel: |
|
|
daran erkennt man welche module von mathematikern geschrieben wurden  _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
Westbeam

Anmeldungsdatum: 22.12.2009 Beiträge: 760
|
Verfasst am: 07.11.2011, 18:32 Titel: |
|
|
MisterD hat Folgendes geschrieben: | wenn er sagt Offsets 108-11E, dann sollte er vermutlich weder 108 noch &hA0 sondern &h108 schreiben? |
Hab ich doch?  |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 07.11.2011, 18:41 Titel: |
|
|
Zitat: | Get #ff,&hA0+i,Header.namoffset(i) |
Ist irgendwie nicht ganz &H109. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
|