Jetzt suche ich eine Seite oder Programm, welches mir die Hex-Zahlen so
in Text umwandelt und auch Text in diese Form zurück wandelt.
Vielleicht hat ja hier einer eine gute Seite oder Programm?
Gruß Kilian
Kilian K. schrieb:> Hallo,>> in einem Webserver Beispiel für meinen Arduino habe ich ein Array, wo> der HTML Code drin steht. Dies sieht so aus:> static const unsigned char data__index_html[] = {> /* /index.html (12 chars) */> 0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x00,
Wer so einen Unsinn verbrochen hat, sollte mit dem nassen Fetzen
erschlagen werden! na ja, Arduio eben.
Da steht nichts anderes als
und die Frage, welche Darstellung du benutzen willst, stellt sich in
Wirklichkeit gar nicht.
Die Umwandlung in lesbaren Text machst du einmalig mit einer ASCII
Tabelle (wobei du dich zum Teil auch an der Kommentierung im Code
orientieren kannst, um deine Übertragung zu kontrollieren). Und dann
belässt du das auch bei der lesbaren Version!
Karl Heinz schrieb:> Wer so einen Unsinn verbrochen hat, sollte mit dem nassen Fetzen> erschlagen werden!
Das dachte ich mir auch!
Bei den ersten Zeilen ist es ja noch klar was da steht durch die
Kommentare. Aber bei dem dicken Brummer unten halt nicht...
Im Internet gibt es ja genug Konverter aber diese kommen alle nicht mit
dem Komma und dem "0x" zurecht. Und ehrlich gesagt hab ich jetzt nicht
viel Lust dies per Hand wegzumachen! Deshalb frage ich...
Abgesehen von einem simplen Textersatz, der immer noch ein wenig
langwierig ist, fällt mir folgende dumme Methode ein:
Compiliere die Files und schaue Dir das Ergebnis in einem HEX-Editor an
- der dann natürlich eine umschaltbare Darstellung in ASCII haben muss.
Da kopierst Du den String dann heraus. Vorsicht bei Sonderzeichen, die
kein ASCII-Äquivalent haben.
Kilian K. schrieb:> Und ehrlich gesagt hab ich jetzt nicht> viel Lust dies per Hand wegzumachen! Deshalb frage ich...
Ich schätze mal, da wirst du durch müssen. Das meiste kann man sowieso
dann im Text erraten. D.h. selbst wenn du wo einen Überstzungsfehler
machst, wirst du beim durchlesen des Textes draufkommen. Ein
1
<tbbla>
ist mit Sicherheit ein Transkriptionsfehler, das muss
1
<table>
heissen (und wird sich dann auch durch Überprüfen in den Bytes
bestätigen).
Mehr Sorgen macht mir allerdings: Wenn jemand so etwas in einem Beispiel
anbietet, was hat er dann im Code sonst noch so verbrochen?
:-)
Was du machen kannst:
lass den Web Server das Zeug rausschicken, geh in deinen Browser und
lass dir dort den Quelltext anzeigen. Dort hast du dann die lesbare
Version
:-)
Ha.
Es gibt noch eine Möglichkeit
Du hast den Text ja als Programm-Code vorliegen :-)
Kopier in raus, schreib dir am PC ein simples main() drumherum, welches
den Text per printf ausgibt (da kannst du dann auch Sonderzeichen schön
berücksichtigen). Per Command Line Redirection in ein File schreiben
lassen und vola, du hast zumindest mal die Rohfassung fertig.
Kurz und gut: Mit einem Editor und einem C-Compiler (und einem Bier)
kann man fast alle Probleme lösen. Was nicht passt, wird eben passend
gemacht.
Da muß aber einer viel lange Weile gehabt haben.
Schreibe ein Programm, was dir den Text in eine Datei schreibt.
Dann ersetze darin alle Zeilenumbrüche durch \r\n.
Und dann füge den Text direkt in "" in das C-File ein.
Karl Heinz schrieb:> Was du machen kannst:> lass den Web Server das Zeug rausschicken, geh in deinen Browser und> lass dir dort den Quelltext anzeigen. Dort hast du dann die lesbare> Version
Danke, das ist eine gute Idee! :-D Das werde ich mal machen.
Hättest du vielleicht auch eine Idee, wie ich das dann in dem Code durch
den lesbaren Text ersetzen kann?
Hab dir vorsichtshalber mal die Datei in den Anhang gepackt, wo das
ganze HTML Zeug drin steht...
hast du Schwierigkeiten?
der 0x00 in der ersten Zeile wird mit einer Escape Sequenz \x00 in einem
String dargestellt. die 0x0D bzw 0x0A übersetzen sich zu \r und \n.
Ob noch weitere nicht darstellbare ASCII Zeichen vorkommen, hab ich
nicht untersucht.
Karl Heinz schrieb:> belässt du so wie er ist. Das ist offenbar ein Bild. Da gewinnst du> nichts, wenn du das in Text überführst.
Na ja. Fast.
Den Teil mit dem Filenamen, Servernamen und Content Type könnte man in
eine Textversion überführen. Das würde die Wartung der Nicht-Bildteile
vereinfachen.
da war er sich offenbar nicht mit sich selbst einig, ob die erste Angabe
des Filenamens mit einem \0 oder mit \r\n enden soll.
Aber scheinbar ist es ihm dann selbst zu blöd geworden, die Hex-Zahlen
Version zu warten.
A. H. schrieb:> Geht natürlich etwas schief, da schon im Text ein '\0' steht, aber man> sieht erst mal was und man kann's ja ausbauen:
Exakt.
Ich hätt es dann so gemacht:
und dann sukzessive noch fehlende Sonderzeichen ergänzt. Bei der
Gelegenheit werden dann auch noch die syntaktisch notwendigen " ergänzt.
Wie schon gesagt: Im Zweifel schreibt man sich eben am PC mal ein kurzes
Hilfsprogramm, dass einem die langweilige Arbeit abnimmt. Das hat 2
Vorteile: zum einen spart man sich Arbeit, zum anderen kriegt man Übung.
Die leitzten Feinheiten im Text macht man dann ganz einfach mit der Hand
im Editor. Es macht jetzt auch keinen Sinn, einen halben Tag in das
Konvertierprogramm zu investieren. Das Hilfsprogramm soll mit wenig
Aufwand eine weitgehend fertige Rohfassung liefern.
A. H. schrieb:> Ich hätt's erst mal so probiert:#include <stdio.h>>> static const unsigned char data__index_html[] = {> … , '\0' // <--!> };>> main()> {> printf("%s\n", data__index_html);> }
Fast! Aber der richtige weg:
printf("%.*s\n", sizeof(data__index_html),data__index_html);
Hoffentlich stimmt der punkt, hab gerade keine zeit zum testen.
Daniel A. schrieb:> A. H. schrieb:>> Ich hätt's erst mal so probiert:#include <stdio.h>>>>> static const unsigned char data__index_html[] = {>> … , '\0' // <--!>> };>>>> main()>> {>> printf("%s\n", data__index_html);>> }>> Fast! Aber der richtige weg:> printf("%.*s\n", sizeof(data__index_html),data__index_html);>> Hoffentlich stimmt der punkt, hab gerade keine zeit zum testen.
Was beabsichtigst du damit?
Damit kannst du den \0 nicht austricksen. Denn für %s ist der String
dort zu Ende. Da hilft dir auch die Angabe einer Feldbreite nichts.
Daniel A. schrieb:> Fast! Aber der richtige weg:> printf("%.*s\n", sizeof(data__index_html),data__index_html);
Stimmt, kannte ich noch gar nicht. (Aber als braver Junge halte ich mich
von solch üblen Hacks natürlich normalerweise fern und meine Strings
sind selbstverständlich auch alle richtigt terminiert :-)
Karl Heinz schrieb:> Daniel A. schrieb:>> Fast! Aber der richtige weg:>> printf("%.*s\n", sizeof(data__index_html),data__index_html);>>>> Hoffentlich stimmt der punkt, hab gerade keine zeit zum testen.>> Was beabsichtigst du damit?> Damit kannst du den \0 nicht austricksen. Denn für %s ist der String> dort zu Ende. Da hilft dir auch die Angabe einer Feldbreite nichts.
Stimmt schon, dass Ergebnis ist natürlich das selbe und in beiden Fällen
nicht die ganze Wahrheit. Aber der Charme dieser Lösung liegt natürlich
darin, dass ich das originale Feld nicht modifizieren muss. „Richtiger“
wird es dadurch natürlich nicht.
> Wie mache ich es denn wenn ich wie hier so Design Sachen habe? Da> meckert er jetzt wegen dem "white"...
Der meckert nicht wegen dem white, sondern weil du für ein " in einem
String eine Escpae Sequenz benutzen musst
>> Wie mache ich es denn wenn ich wie hier so Design Sachen habe? Da>> meckert er jetzt wegen dem "white"...>> Der meckert nicht wegen dem white, sondern weil du für ein " in einem> String eine Escpae Sequenz benutzen musst>>
1
>...
2
>"<body bgcolor=\"white\" text=\"black\">\r\n"
3
>...
4
>
Ergo: Konverter mit einem weiteren Fall erweitern (denn das wird oft
vorkommen)
>> Wie mache ich es denn wenn ich wie hier so Design Sachen habe? Da>> meckert er jetzt wegen dem "white"...>> Der meckert nicht wegen dem white, sondern weil du für ein " in einem> String eine Escpae Sequenz benutzen musst>>
1
>...
2
>"<body bgcolor=\"white\" text=\"black\">\r\n"
3
>...
4
>
Wobei man Attribute in HTML auch mit '...' statt "..." schreiben kann.
Also:
Kilian K. schrieb:> Im Internet gibt es ja genug Konverter aber diese kommen alle nicht mit> dem Komma und dem "0x" zurecht.
ist mir auch aufgefallen, nur wo war dein Problem?
suchen & ersetzen kann fast jeder Texteditor
aus 0x mache [SPACE]
aus ,[SPACE] mache [SPACE]
aus [SPACE][SPACE] mache [SPACE]
und dann klappt es auch mit den I-net Konvertern
Karl Heinz schrieb:> Ergo: Konverter mit einem weiteren Fall erweitern (denn das wird oft> vorkommen) for (i=0;> i<sizeof(data__index_html)/sizeof(*data__index_html); ++i) {> if( data__index_html[i] == 0x00 )> printf( "\\0" );> else if( data__index_html[i] == '"' )> printf( "\\\"" );> else if( data__index_html[i] == 0x0D )> printf( "\\r" );> else if( data__index_html[i] == 0x0A )> pritnf( "\\n\"\n\"" );>> else if( isprint( data__index_html[i] )> putchar( data__index_html[i] );>> else> putchar( '?' );> }>> und nochmal generieren lassen.
Also die Schleife klappt wunderbar! :-) Hab da mal das Array durch
gejagt und er hat mir alles wunderbar ausgegeben!!!
Dank eurer Hilfe hab ich jetzt alles vom Hex-Müll in lesbaren Text
umgewandelt.
Also danke!!! :-D
Kilian K. schrieb:> Also die Schleife klappt wunderbar! :-) Hab da mal das Array durch> gejagt und er hat mir alles wunderbar ausgegeben!!!
Was lernen wir daraus?
Anstatt stundenlang nach einem Werkzeug im Web zu suchen, ist es oft
einfacher sich in ein paar Minuten mal schnell selbst ein Werkzeug
quick&dirty zu programmieren.
Kommt immer wieder mal vor. Genau darum hab ich auch auf allen Maschinen
immer auch einen C Compiler in der Hinterhand.
Jetzt hats mich mal selber interessiert, was da weltbewegendes im HTML
drinnen steht :-)
(Ein Tab kommt in den Daten noch vor. Konverter erweitern: 0x09 führt zu
einer Ausgabe von \t).
Bei dem Ergebnis hätte es die Geheimniskrämerei wirklich nicht gebraucht
:-)
Karl Heinz schrieb:>> printf("%.*s\n", sizeof(data__index_html),data__index_html);>>>> Hoffentlich stimmt der punkt, hab gerade keine zeit zum testen.>> Was beabsichtigst du damit?> Damit kannst du den \0 nicht austricksen. Denn für %s ist der String> dort zu Ende. Da hilft dir auch die Angabe einer Feldbreite nichts.
Ich hätte schwören können das dass einmal funktionierte, diesmal eine
Getestete variante: