Auslesen einer binären Datei
Verfasst: 10.10.2025 12:39
Hallo, ich habe etwas Probleme, eine binäre Datei mit einem XML-Vorspann (von einem elektr. Arkordeon) auszulesen. In dem XML-Vorspann steht dann bei
<SET size="26038" number="1400" offset="0">
die Größe der Registrierungen (26038 Bytes). Die .upa-Datei umfaßt genau 100 Bänke mit jeweils 14 Registrierungen (100 X 14 = 1400). Das sind also 1400 Registrierungen, an denen jeweils bei Offset $39B ein 20 Bytes langer 7Bit-Ascii - String steht, der den Titel beinhaltet. Zum Ende können diese
Titel auch leer sein, je nachdem wieviele halt gespeichert wurden. Aber zuerst will ich mal den Startoffset finden.
Es scheint so, als daß ich den richtigen Anfangs-Offset nicht genau bestimmen kann. Die Anzahl der XML-Einträge kann auch etwas variieren. Bei manchen Dateien fehlt dann die <UPLIST....>, so daß man vorher keinen fest definierten Startoffset festlegen kann.
Der relevante Teil sieht dann so aus :
hinter dem XML gibt es noch 7 Bytes (eine Art Magic-Header), den man überspringen muß.
Ich habe von einem Freund zwar ein Kommandozeilentool, möchte es aber auf Windows mit GUI (z.b. Listbox) portieren.
Das Tool gibt mir auch eine Textdatei mit den Titeln aus :
Hier mal die ersten 50 Titel :
Wie kann man jetzt die genaue Stelle
�Ikxԛ�`�� �dT�
+ halt die 7 Bytes programmtechnisch genau ermitteln ?
<SET size="26038" number="1400" offset="0">
die Größe der Registrierungen (26038 Bytes). Die .upa-Datei umfaßt genau 100 Bänke mit jeweils 14 Registrierungen (100 X 14 = 1400). Das sind also 1400 Registrierungen, an denen jeweils bei Offset $39B ein 20 Bytes langer 7Bit-Ascii - String steht, der den Titel beinhaltet. Zum Ende können diese
Titel auch leer sein, je nachdem wieviele halt gespeichert wurden. Aber zuerst will ich mal den Startoffset finden.
Es scheint so, als daß ich den richtigen Anfangs-Offset nicht genau bestimmen kann. Die Anzahl der XML-Einträge kann auch etwas variieren. Bei manchen Dateien fehlt dann die <UPLIST....>, so daß man vorher keinen fest definierten Startoffset festlegen kann.
Der relevante Teil sieht dann so aus :
Im Original sind da vor den spitzen Klammern noch TABs drin, die die Forensoftware hier abgeschnitten hat.a<?xml version="1.0" encoding="utf-8"?>
<Roland_Fr_UPA>
<SET size="26038" number="1400" offset="0">
<SC size="128" number="1" offset="0"/>
<O_R size="86" number="26" offset="128"/>
<OB_R size="66" number="7" offset="2364"/>
<OBC_R size="72" number="8" offset="2826"/>
<OFB_R size="72" number="8" offset="3402"/>
<TR size="304" number="16" offset="3978"/>
<BR size="84" number="16" offset="8842"/>
<BCR size="96" number="16" offset="10186"/>
<ORR size="64" number="26" offset="11722"/>
<OBR size="42" number="7" offset="13386"/>
<OBCR size="124" number="8" offset="13680"/>
<OFBR size="118" number="8" offset="14672"/>
<ORCH1 size="210" number="28" offset="15616"/>
<ORCH2 size="152" number="28" offset="21496"/>
<SC2 size="286" number="1" offset="25752"/>
</SET>
<UPLIST size="131072" number="1" offset="36453200"/>
</Roland_Fr_UPA>
�Ikxԛ�`�� �dT� @ ��P � @ ( s�
hinter dem XML gibt es noch 7 Bytes (eine Art Magic-Header), den man überspringen muß.
Ich habe von einem Freund zwar ein Kommandozeilentool, möchte es aber auf Windows mit GUI (z.b. Listbox) portieren.
Das Tool gibt mir auch eine Textdatei mit den Titeln aus :
Hier mal die ersten 50 Titel :
Das möchte ich dann mit PB gerne nachbauen. Wenn ich da den richtigen Startoffset hätte, wäre mir schon viel geholfen.upg_all 001 "UsrPrg DALE ON"
upg_all 002 "Classic 8"
upg_all 003 "ALPINE"
upg_all 004 "Mandolin"
upg_all 005 "TRUMPET"
upg_all 006 "CLARINET"
upg_all 007 "Low BRASS"
upg_all 008 "MASTER"
upg_all 009 "Sax Ensemble)Muss"
upg_all 010 "BASSoonSAX"
upg_all 011 "Musette16 (GTR)"
upg_all 012 "PIANO"
upg_all 013 "Twang GTR"
upg_all 014 "BRASS SYNTH"
upg_all 015 "Addams Family"
upg_all 016 "MISTY Jazz GTR"
upg_all 017 "HARRY POTTER"
upg_all 018 "GHOST RIDER"
upg_all 019 "BALL PARK ORGAN"
upg_all 020 "HarmoniCATS"
upg_all 021 "UNDER THE SEA"
upg_all 022 "STAR WARS"
upg_all 023 "NeverOnSunday"
upg_all 024 "GHOST RIDER"
upg_all 025 "Don't Worry"
upg_all 026 "SALOON BAND"
upg_all 027 "Star Trek"
upg_all 028 "BagPipe"
upg_all 029 "ART Van Damme"
upg_all 030 "GIRL FROM"
upg_all 031 "Accord_Organ"
upg_all 032 "Cordovox 8'"
upg_all 033 "CORDOVOX"
upg_all 034 "BIG BAND"
upg_all 035 "SwingOrgan"
upg_all 036 "MoscowNights"
upg_all 037 "ALPINE Master"
upg_all 038 "BesameMucho"
upg_all 039 "SingInTheRain"
upg_all 040 "PianoStringBallad"
upg_all 041 "PIANOmellow"
upg_all 042 "HAWAIIAN GTR"
upg_all 043 "THEATER1"
upg_all 044 "THEATER2"
upg_all 045 "THEATER3"
upg_all 046 "THEATER4"
upg_all 047 "SYNTH 5"
upg_all 048 "THEATER6"
upg_all 049 "HORN7"
upg_all 050 "SYNTH KLAR"
Wie kann man jetzt die genaue Stelle
�Ikxԛ�`�� �dT�
+ halt die 7 Bytes programmtechnisch genau ermitteln ?