html in c umwandeln

OP #2892646
Lesenswert?

Hallo zusammen,

ich möchte gerne einen einfachen webserver auf einem LPC1768 realiseren. 
Der LwIP-Stack läuft mitlerweile und eine "fertige" Seite auch schon. 
Habe jetzt aber eine eigene kleine Seite in html geschrieben und die 
muss ja jetzt, wenn ich es richtig verstanden habe in dieses fsdata.c . 
Da steht dann alles in hexadezimal. Aber womit kann ich das machen??? 
ich habe zwar einen ordner wo eine makefsdata.c drin ist aber wie wende 
ich diese an? (einfach kompilieren und los geht leider nicht) Gibt es 
für sowas Tools?
#2892659
Lesenswert?

R. B. schrieb:
> Hallo zusammen,
>
> ich möchte gerne einen einfachen webserver auf einem LPC1768 realiseren.
> Der LwIP-Stack läuft mitlerweile und eine "fertige" Seite auch schon.
> Habe jetzt aber eine eigene kleine Seite in html geschrieben und die
> muss ja jetzt, wenn ich es richtig verstanden habe in dieses fsdata.c .
> Da steht dann alles in hexadezimal.

Nö.
Im C-File schreibst du das so rein, wie es dir am besten passt. Und bei 
Text ist das ... tada ... Text. Und nicht die ASCII Codes des Textes als 
Hex-Ziffern.
1
char Seite[] = {
2
  "<html>\n"
3
  "<body>\n"
4
  "   Juhu\n"
5
  "</body>\n"
6
  "</html>\n"
7
};

ist perfektes C. Und sich ein C-Programm auf dem PC zu schreiben, 
welches ein HTML File Zeile für Zeile ausliest und mit den 
entsprechenden Ergänzungen versieht, damit es als include in ein anderes 
C-File taugt, ist nun wirklich trivial und eine Anfängerübung für 
Filebehandlung in C.

Im Endeffekt kommt das dann sinnvollerweise so hin

fsdata.c
**********
1
....
2
char Seite[] = {
3
#include "htmlCode.inc"
4
};
5
...


htmlCode.inc
************
1
  "<html>\n"
2
  "<body>\n"
3
  "   Juhu\n"
4
  "</body>\n"
5
  "</html>\n"

Damit kann man dann den HTML Code mittels Tool leicht ändern bzw. 
erzeugen lassen, ohne ständig im eigentlichen C-File rumfuhrwerken zu 
müssen. Dem #include ist es ja egal, welches File er da reinzieht. Das 
angegebene File wird an der Stelle, an der der #include steht einfach 
eingesetzt. Und erst danach muss sich daraus dann gültiger C-Code 
ergeben.
Persönliche Seite #2892671
Lesenswert?

Karl Heinz Buchegger schrieb:
> ist nun wirklich trivial und eine Anfängerübung für
> Filebehandlung in C.

Ganz so trivial ist das auch nicht, da HTML u.A. Attribute mit " 
versieht und auch der "Text" ggf. Sonderzeichen erlaubt, welche in 
"normalem" C-Strings nicht ganz erlaubt sind, bei UTF-8/Unicode/... und 
sonstigen encodings wird es dann ggf. richtig hässlich.
Ein Umwandeln in "hex" ist da sehr viel Stressfreier solange man 
wirklich nur den reinen Bytestream rausgeben will.
#2892677
Lesenswert?

Läubi .. schrieb:
> Karl Heinz Buchegger schrieb:
>> ist nun wirklich trivial und eine Anfängerübung für
>> Filebehandlung in C.
>
> Ganz so trivial ist das auch nicht, da HTML u.A. Attribute mit "
> versieht und auch der "Text" ggf. Sonderzeichen erlaubt, welche in
> "normalem" C-Strings nicht ganz erlaubt sind, bei UTF-8/Unicode/... und
> sonstigen encodings wird es dann ggf. richtig hässlich.

Jau. Ist aber alles letzten Endes nur Textersetzung. Anstatt eines " ein 
\" auszugeben, ist nicht wirklich wild. Und den Rest sollte ja 
eigentlich der HTML Code bereits korrekt aufgelöst haben (Umlaute 
u.dgl.)

> Ein Umwandeln in "hex" ist da sehr viel Stressfreier solange man
> wirklich nur den reinen Bytestream rausgeben will.

... und ... wenn man es kann :-)
Persönliche Seite #2892695
Lesenswert?

Karl Heinz Buchegger schrieb:
> Und den Rest sollte ja
> eigentlich der HTML Code bereits korrekt aufgelöst haben

Keine Ahnung wie ein C-Compiler mit UTF-8 klarkommt, und es sind halt 
die Kleinigkeiten welche es schwer machen, ich könnte in HTML schreiben
1
<div myAttr="\" />
 und schon gibts blöde Kompilierfehler...

Karl Heinz Buchegger schrieb:
> ... und ... wenn man es kann :-)

Naja die Bytes in Hex zu wandeln sind dann auch nicht mehr soooo schwer. 
Wenn es nun zu arg stört kann man immer noch den Linker nutzen die 
Binärdaten direkt einzubinden ;-)
#2892710
Lesenswert?

Läubi .. schrieb:
> Karl Heinz Buchegger schrieb:
>> Und den Rest sollte ja
>> eigentlich der HTML Code bereits korrekt aufgelöst haben
>
> Keine Ahnung wie ein C-Compiler mit UTF-8 klarkommt, und es sind halt
> die Kleinigkeiten welche es schwer machen, ich könnte in HTML
> schreiben
1
<div myAttr="\" />
 und schon gibts blöde
> Kompilierfehler...

OK. Backslash muss man noch ersetzen
1
char code[] = {
2
"<div myAttr=\"\\\" />"
3
};


> Naja die Bytes in Hex zu wandeln sind dann auch nicht mehr soooo schwer.

Für den TO offenbar aber schon :-)
(Ich würds aber trotzdem nicht machen. Text ist einfacher zu warten, 
wenns mal Probleme gibt)
#2892715
Lesenswert?

Wenn ich mirs recht überlege, muss man das noch nicht mal zeilenweise 
lesen. Das kann man Buchstabe für Buchstabe einlesen, den Buchstaben je 
nachdem  aufbereiten und aufs Include File schreiben.

Alles in allem nicht wirklich wild. Wer das Kapitel Filebhandlung in 
seinem K&R durch hat, sollte da eigentlich keinerlei Schwierigkeiten 
haben.
#2892731
Lesenswert?

Du hast schon recht, wenn man das mit allem PipaPo macht, dann ist da 
schon etwas an Arbeit notwendig.
Die Frage ist allerdings: braucht er das wirklich?
Oder kommt er mit dem durch, was sich mittels normalem ASCII-Html alles 
machen lässt.
In dem Fall ist das einfach nur ein wenig Text-Aufbereitung, so dass man 
es als String durch den C-Compiler bringt.
Persönliche Seite #2892743
Lesenswert?

Karl Heinz Buchegger schrieb:
> Läubi .. schrieb:
>> Karl Heinz Buchegger schrieb:
>>> Ich würds aber trotzdem nicht machen
>> Bleibt noch das Problem mit Multibyte Zeichen...
>
> Wie sieht das im HTML Code aus?

Die Datei ist einfach UTF-8  UTF-16  ... codiert.

Karl Heinz Buchegger schrieb:
> Oder kommt er mit dem durch, was sich mittels normalem
> ASCII-Html alles machen lässt.
Klar gehen tut das gerade das Encoding wurde ja eh jahrelang von allen 
(Browser/Server) Seiten recht "großzügig" ausgelegt. Wenn man es aber eh 
Zeichenweise ausliest ist doch eine Ausgabe als Hex nun wirklich nicht 
mehr wild...
#2892833
Lesenswert?

Falls dein Compiler GCC + GNU Binutils ist, dann kannst du die HTML 
Datei auch mit dem inline Assembler + .incbin Direktive in dein Programm 
einbetten. Hätte den Vorteil, daß man an deinem Buildprozess nichts 
drehen müsste, die Datei wird nach dem Compilieren einfach genau so wie 
sie ist beim Assemblieren eingelesen.

http://sourceware.org/binutils/docs-2.20/as/Incbin.html#Incbin

Beispiel. Wenn du dies hier als foo.c speicherst und mit gcc foo.c -o 
foo kompilierst, dann gibt ./foo den eigenen Quellcode aus.
1
#define INCLUDE_TEXT(X,F) asm (          \
2
 ".globl " #X\n"                         \
3
 "  .data\n"                             \
4
 "  .type  " #X ", @object\n"            \
5
 "   .size  " #X ", " #X "End-" #X "\n"  \
6
 #X ":\n"                                \
7
 "  .incbin \"" F "\"\n"                 \
8
 "   .byte 0,0,0,0\n"                    \
9
 #X "End:\n"                             \
10
 ); extern char X[];
11

12
INCLUDE_TEXT(SomeText,"foo.c");
13
int main()
14
{
15
  puts(SomeText);
16
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren