Hallo,
was genau willst Du denn machen?
Kannst Du nicht einfach das Html durch
google: Addslashes Stripslashes Escape string
jagen und dann in einen char* schreiben?
Vlg
Timm
Ich hab mir für sowas schnell in Tool in BCB zusammengehackt.
- öffne Datei (egal welcher Typ) zum Lesen
- öffne Datei neu zum Schreiben
- lese ein Byte
- schreibe "0x" und Hex(Byte) und ", "
- wiederhole bis anzahl=16 , schreibe "\r\n"
- wiederhole bis dateiende
- schliessen beider dateien
Klammern drum, Variablenname davor, fertsch
Für einen AVR-NET-IO Webserver habe ich eine HTML-Seite erstellt und
diese soll in den Quelltext (Beispiel siehe Anhang) eingebunden werden.
mfg
Jürgen
Jürgen schrieb:> Für einen AVR-NET-IO Webserver habe ich eine HTML-Seite erstellt und> diese soll in den Quelltext (Beispiel siehe Anhang) eingebunden werden.>
Ja, ok.
Schreib dir ein Tool welches den Text aufbereitet und in einer neuen
Datei ablegt. Und die inkludest du dann ganz einfach
1
charText[]={
2
#include"index.html"
3
};
Einzig die Aufbereitung müsstest du dir halt schreiben. Aber das ist ja
für einen C-Programmierer kein Hexenwerk. Im Grunde brauchst du nicht
mehr tun, als vor jede Zeile ein " setzen, am Ende einer Zeile ein "
setzen und ein paar Buchstaben durch andere zu ersetzen. Zb " durch \",
\ durch \\, Tabulator durch \t und noch ein paar andere.
Ist ein einfaches C-Programm welches diese Aufbereitung macht und
eigentlich sollte jeder C-Programmierer in der Lage sein, sich in einer
halben Stund ein entsprechendes Tool zu machen. Ja, manchmal macht man
sich seine Werkzeuge auch selber, weils einfach schneller geht als 2
Stunden nach einem Tool zu suchen. Hat man natürlich einen
entsprechenden Editor, dann kann auch der die Aufbereitung mittels
Makro-Programmierung machen oder man benutzt einen Stream-Editor wie
"sed" für solche Aufgaben. Je nach Lust und Laune und Tools die man hat
und die man kennt.
Aus
1
<html>
2
<body>
3
Dies ist "meine" Seite
4
</body>
5
</html>
wird dann eben nach der Aufbereitung
1
"<html>"
2
"<body>"
3
"Dies ist \"meine\" Seite"
4
"</body>"
5
"</html>"
und das ist perfekt, um als String durch den C-Compiler zu gehen.
Ich habe sowas in Perl geschrieben. Das Programm konvertiert alle
Dateien in einem Verzeichnis in C Arrays. Unter Windows empfehle ich
Strawberry Perl, falls Du noch kein Perl installiert hast.
http://stefanfrings.de/qtwebapp/QtWebApp-src.zip
Darin ist es die Datei makefsdata. Du kannst auch abgucken, wie ich es
in mein Makefile eingebunden habe. Das Ergebnis sieht z.B. so aus:
Erklärung dazu:
Die Arrays enthalten jeweils Dateiname und Datei-Daten nacheinander. Die
Strukturen enthalten das Inhaltsverzeichnis, jeweils eine Struktur pro
Datei:
1) Zeiger auf die Struktur der nächste Datei
2) Zeiger auf den Dateinamen
3) Zeiger auf die Datei-Daten
4) Größe der Datei in Bytes
HTTPD_FS_ROOT zeigt auf die Struktur der ersten Datei. Wenn man eine
Datei mit einem bestimmten Namen zur Laufzeit suchen will, beginnt man
bei der ersten Datei und hangelt sich über die Zeiger von Struktur zu
Struktur. Das Ende der Kette ist durch eine 0 gekennzeichnet.
Im obigen Beispiel ist die erste Datei in der Kette file_raster_png (mit
dem Dateinamen "/raster.png"). Deren Struktur zeigt an, dass die nächste
Datei file_404_html (mit dem Dateinamen "/404.html") ist. Deren Struktur
wiederum zeigt auf nichts (0), weil es die letzte Datei in der Kette
ist.
PS: Falls mir jemand verraten kann, wie ich die Formatierung der
Hexadezimal-Zahlen elegant einheitlich gestalten kann, so dass alle
Zeilen immer genau gleich lang sind, würde ich mich freuen. Ich bin
eigentlich kein Perl Spezialist, deswegen habe ich es nicht schöner
hinbekommen.
@Joerg
Dankeschön. So sind schonmal alle Hexadezimazahlen zweistelling. Ich
habe auch herausgefunden, wie man die Sonderbehandlung der 0 Werte
einsparen kann:
printf DFILE "0x%2.2x",$byte_wert;
Ist eigentluch ganz naheliegend. Nur manchmal sehen wir den Wald vor
lauter Bäume nicht :-)