Hallo,
ich möchte eine Datei, die nur Zahlen beinhaltet mit einem uC
verarbeitet.
Ich nehme als Beispiel eine MIDI-Datei. Ich öffne die Datei im
Text-Editor. Kopiere als Test etwas aus dem Inhalt in ein uint8_t
1
uint8_tTest[]={"MThd ðMTrk "};
Nun lese ich die einzelnen char aus und siehe da, alles bestens -- bis
auf die Leerzeichen, die sind immer 0x20, alles andere stimmt -- 4D 54
68 64 20 (die eigentlich eine 0 sein müsste).
Gibt es eine Lösung, denn ab und zu gibt es ja auch eine 20?
Oder muss man eine if Bedingung für das Leerzeichen setzen ?
Das kann so nicht gehen, vielleicht für einige Codes, aber nicht für
alle.
Um das nach C umzuwandeln, könntest Du so vorgehen:
In einer Programmiersprache Deiner Wahl (C, Java, Brainfck, Intercal,
...) liest Du die Datei binär ein und schreibst einen String, der für
jedes Zeichen die Oktal-Sequenz enthält, zB
1
char*midi="\000\101\000";
Für die drei Werte 0x0, 0x41 bzw 'A', 0x0.
Druckbare Zeichen kannst natürlich auch direkt hinschreiben, dann wirds
lesbarer.
0x20 ist in diesem Fall ja richtig, denn das ist der ASCII-Code des
Leerzeichens.
Das Zeichen mit dem Wert Null ist im Texteditor nicht darstellbar und
kommt in keiner Text- oder MIDI-Datei vor.
Such für weitere Infos am besten mal nach ASCII-Tabelle.
Verstehe ich nicht so richtig.
Die Dateien, die ich benutzen will sind ca. 8KB groß - bis auf die 0x20,
die = der 0 ist, funktioniert es bequem, die Datei im Editor zu öffnen
und dann nur noch die "" davor und dahinter zu schreiben.
Wie lese ich die Datei und wohin ein und wie bekomme ich das dann ins
AVR Studio? Könntest Du das genauer erklären?
Danke ...
Jens wrote:
> Verstehe ich nicht so richtig.>> Die Dateien, die ich benutzen will sind ca. 8KB groß - bis auf die 0x20,> die = der 0 ist, funktioniert es bequem, die Datei im Editor zu öffnen
Glaub ich nicht.
SIcherlich kannst du die Datei in einem Editor öffnen, nur bleibt
die Hälfte des INhalts dabei auf der Strecke.
Nämlich alle Codes, für die es kein entsprechendes ASCII
Zeichen mit diesem Code gibt.
> und dann nur noch die "" davor und dahinter zu schreiben.> Wie lese ich die Datei und wohin ein und wie bekomme ich das dann ins> AVR Studio? Könntest Du das genauer erklären?
Hat er doch schon.
Du schreibst dir auf dem PC ein Hilfsprogramm, welches dir
den Dateiinhalt in korrekter Form in eine Array Initialisierung
umwandelt, so dass du ihn in deinem Programm auch benutzen
kannst.
Dieses Hilfsprogramm läuft auf dem PC(!) und erzeugt dir
zb dieses hier
unsigned char bytes[] = "
0x41, 0x00, 0x58, 0x2F, 0x10, ....
";
Also z.B. in Delphi o.a. ein Programm schreiben, welches die Datei
ausliest und sie neu schreibt bzw. ausgibt?
Übrigens mit dem Editor wird doch alles angezeigt, auch viele
Lehrzeichen für die Nulln eben.
Dieter wrote:
> Das Zeichen mit dem Wert Null ist im Texteditor nicht darstellbar und> kommt in keiner Text- oder MIDI-Datei vor.
Doch, 0 kommt in midi-Dateien vor, abenso wie andere nicht-druckbare
Zeichen.
1
#include<stdio.h>
2
3
intmain(intargc,char*argv[])
4
{
5
inti;
6
FILE*fin;
7
8
if(2!=argc)
9
{
10
fprintf(stderr,"Brauche Name der Eingabedatei\n");
11
return-1;
12
}
13
14
if(0==(fin=fopen(argv[1],"rb")))
15
{
16
fprintf(stderr,"Kann Datei '%s' nicht offnen\n",argv[1]);
0) gcc besorgen, ist bei Linux anbei oder zB bei Code::Blocks (Win32,
Linux, MacOS)
1) Abspeichern als "file-to-string.c"
2) gcc -O2 file-to-string.c -o file-to-string.exe
3) file-to-string.exe input.midi > output.c
Ne Shell/Kommandozeile aufmachen (sh, bash, cmd.exe, ...) und 2)
ausführen, d.h. eintippen + <RETURN>. Gibt im gleichen Verzeichnis die
exe oder eben das, was hinter der -o Option steht.
Oder ein C::B-Projekt anlegen, aber das weiß ich net auswendig (hab das
C::B auch nur um gcc per Kommandozeile nutzen zu können).