Forum: Mikrocontroller und Digitale Elektronik hex -> text und andersrum konvertieren


von Kilian K. (kellermaaan)


Lesenswert?

Hallo,

in einem Webserver Beispiel für meinen Arduino habe ich ein Array, wo 
der HTML Code drin steht. Dies sieht so aus:
1
static const unsigned char data__index_html[] = {
2
/* /index.html (12 chars) */
3
0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x00,
4
5
/* HTTP header */
6
/* "HTTP/1.0 200 OK
7
/" (17 bytes) */
8
0x48,0x54,0x54,0x50,0x2f,0x31,0x2e,0x30,0x20,0x32,0x30,0x30,0x20,0x4f,0x4b,0x0d,
9
0x0a,
10
/* "Server: lwIP/1.3.1 (http://savannah.nongnu.org/projects/lwip)
11
/" (63 bytes) */
12
0x53,0x65,0x72,0x76,0x65,0x72,0x3a,0x20,0x6c,0x77,0x49,0x50,0x2f,0x31,0x2e,0x33,
13
0x2e,0x31,0x20,0x28,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x73,0x61,0x76,0x61,0x6e,
14
0x6e,0x61,0x68,0x2e,0x6e,0x6f,0x6e,0x67,0x6e,0x75,0x2e,0x6f,0x72,0x67,0x2f,0x70,
15
0x72,0x6f,0x6a,0x65,0x63,0x74,0x73,0x2f,0x6c,0x77,0x69,0x70,0x29,0x0d,0x0a,
16
/* "Content-type: text/html
17
18
/" (27 bytes) */
19
0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x74,0x79,0x70,0x65,0x3a,0x20,0x74,0x65,
20
0x78,0x74,0x2f,0x68,0x74,0x6d,0x6c,0x0d,0x0a,0x0d,0x0a,
21
/* raw file data (1751 bytes) */
22
0x3c,0x68,0x74,0x6d,0x6c,0x3e,0x0d,0x0a,0x3c,0x68,0x65,0x61,0x64,0x3e,0x3c,0x74,
23
0x69,0x74,0x6c,0x65,0x3e,0x6c,0x77,0x49,0x50,0x20,0x2d,0x20,0x41,0x20,0x4c,0x69,
24
0x67,0x68,0x74,0x77,0x65,0x69,0x67,0x68,0x74,0x20,0x54,0x43,0x50,0x2f,0x49,0x50,
25
0x20,0x53,0x74,0x61,0x63,0x6b,0x3c,0x2f,0x74,0x69,0x74,0x6c,0x65,0x3e,0x3c,0x2f,
26
0x68,0x65,0x61,0x64,0x3e,0x0d,0x0a,0x3c,0x62,0x6f,0x64,0x79,0x20,0x62,0x67,0x63,
27
0x6f,0x6c,0x6f,0x72,0x3d,0x22,0x77,0x68,0x69,0x74,0x65,0x22,0x20,0x74,0x65,0x78,
28
0x74,0x3d,0x22,0x62,0x6c,0x61,0x63,0x6b,0x22,0x3e,0x0d,0x0a,0x0d,0x0a,0x20,0x20,
29
0x20,0x20,0x3c,0x74,0x61,0x62,0x6c,0x65,0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,
30
0x31,0x30,0x30,0x25,0x22,0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x74,
31
0x72,0x20,0x76,0x61,0x6c,0x69,0x67,0x6e,0x3d,0x22,0x74,0x6f,0x70,0x22,0x3e,0x3c,
32
0x74,0x64,0x20,0x77,0x69,0x64,0x74,0x68,0x3d,0x22,0x38,0x30,0x22,0x3e,0x09,0x20,
33
0x20,0x0d,0x0a,0x09,0x20,0x20,0x3c,0x61,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x68,
34
0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x73,0x69,0x63,0x73,0x2e,0x73,
35
0x65,0x2f,0x22,0x3e,0x3c,0x69,0x6d,0x67,0x20,0x73,0x72,0x63,0x3d,0x22,0x2f,0x69,
36
0x6d,0x67,0x2f,0x73,0x69,0x63,0x73,0x2e,0x67,0x69,0x66,0x22,0x0d,0x0a,0x09,0x20,
37
0x20,0x62,0x6f,0x72,0x64,0x65,0x72,0x3d,0x22,0x30,0x22,0x20,0x61,0x6c,0x74,0x3d,
38
0x22,0x53,0x49,0x43,0x53,0x20,0x6c,0x6f,0x67,0x6f,0x22,0x20,0x74,0x69,0x74,0x6c,
39
0x65,0x3d,0x22,0x53,0x49,0x43,0x53,0x20,0x6c,0x6f,0x67,0x6f,0x22,0x3e,0x3c,0x2f,
40
0x61,0x3e,0x0d,0x0a,0x09,0x3c,0x2f,0x74,0x64,0x3e,0x3c,0x74,0x64,0x20,0x77,0x69,
41
0x64,0x74,0x68,0x3d,0x22,0x35,0x30,0x30,0x22,0x3e,0x09,0x20,0x20,0x0d,0x0a,0x09,
42
0x20,0x20,0x3c,0x68,0x31,0x3e,0x6c,0x77,0x49,0x50,0x20,0x2d,0x20,0x41,0x20,0x4c,
43
0x69,0x67,0x68,0x74,0x77,0x65,0x69,0x67,0x68,0x74,0x20,0x54,0x43,0x50,0x2f,0x49,
44
0x50,0x20,0x53,0x74,0x61,0x63,0x6b,0x3c,0x2f,0x68,0x31,0x3e,0x0d,0x0a,0x09,0x20,
45
0x20,0x3c,0x70,0x3e,0x0d,0x0a,0x09,0x20,0x20,0x20,0x20,0x54,0x68,0x65,0x20,0x77,
46
0x65,0x62,0x20,0x70,0x61,0x67,0x65,0x20,0x79,0x6f,0x75,0x20,0x61,0x72,0x65,0x20,
47
0x77,0x61,0x74,0x63,0x68,0x69,0x6e,0x67,0x20,0x77,0x61,0x73,0x20,0x73,0x65,0x72,
48
0x76,0x65,0x64,0x20,0x62,0x79,0x20,0x61,0x20,0x73,0x69,0x6d,0x70,0x6c,0x65,0x20,
49
0x77,0x65,0x62,0x0d,0x0a,0x09,0x20,0x20,0x20,0x20,0x73,0x65,0x72,0x76,0x65,0x72,
50
0x20,0x72,0x75,0x6e,0x6e,0x69,0x6e,0x67,0x20,0x6f,0x6e,0x20,0x74,0x6f,0x70,0x20,
51
0x6f,0x66,0x20,0x74,0x68,0x65,0x20,0x6c,0x69,0x67,0x68,0x74,0x77,0x65,0x69,0x67,
52
0x68,0x74,0x20,0x54,0x43,0x50,0x2f,0x49,0x50,0x20,0x73,0x74,0x61,0x63,0x6b,0x20,
53
0x3c,0x61,0x0d,0x0a,0x09,0x20,0x20,0x20,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x68,
54
0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,0x77,0x2e,0x73,0x69,0x63,0x73,0x2e,0x73,
55
0x65,0x2f,0x7e,0x61,0x64,0x61,0x6d,0x2f,0x6c,0x77,0x69,0x70,0x2f,0x22,0x3e,0x6c,
56
0x77,0x49,0x50,0x3c,0x2f,0x61,0x3e,0x2e,0x0d,0x0a,0x09,0x20,0x20,0x3c,0x2f,0x70,
57
0x3e,0x0d,0x0a,0x09,0x20,0x20,0x3c,0x70,0x3e,0x0d,0x0a,0x09,0x20,0x20,0x20,0x20,
58
0x6c,0x77,0x49,0x50,0x20,0x69,0x73,0x20,0x61,0x6e,0x20,0x6f,0x70,0x65,0x6e,0x20,
59
0x73,0x6f,0x75,0x72,0x63,0x65,0x20,0x69,0x6d,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,
60
0x61,0x74,0x69,0x6f,0x6e,0x20,0x6f,0x66,0x20,0x74,0x68,0x65,0x20,0x54,0x43,0x50,
61
0x2f,0x49,0x50,0x0d,0x0a,0x09,0x20,0x20,0x20,0x20,0x70,0x72,0x6f,0x74,0x6f,0x63,
62
0x6f,0x6c,0x20,0x73,0x75,0x69,0x74,0x65,0x20,0x74,0x68,0x61,0x74,0x20,0x77,0x61,
63
0x73,0x20,0x6f,0x72,0x69,0x67,0x69,0x6e,0x61,0x6c,0x6c,0x79,0x20,0x77,0x72,0x69,
64
0x74,0x74,0x65,0x6e,0x20,0x62,0x79,0x20,0x3c,0x61,0x0d,0x0a,0x09,0x20,0x20,0x20,
65
0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x77,0x77,
66
0x77,0x2e,0x73,0x69,0x63,0x73,0x2e,0x73,0x65,0x2f,0x7e,0x61,0x64,0x61,0x6d,0x2f,
67
0x6c,0x77,0x69,0x70,0x2f,0x22,0x3e,0x41,0x64,0x61,0x6d,0x20,0x44,0x75,0x6e,0x6b,
68
0x65,0x6c,0x73,0x0d,0x0a,0x09,0x20,0x20,0x20,0x20,0x6f,0x66,0x20,0x74,0x68,0x65,
69
0x20,0x53,0x77,0x65,0x64,0x69,0x73,0x68,0x20,0x49,0x6e,0x73,0x74,0x69,0x74,0x75,
70
0x74,0x65,0x20,0x6f,0x66,0x20,0x43,0x6f,0x6d,0x70,0x75,0x74,0x65,0x72,0x20,0x53,
71
0x63,0x69,0x65,0x6e,0x63,0x65,0x3c,0x2f,0x61,0x3e,0x20,0x62,0x75,0x74,0x20,0x6e,
72
0x6f,0x77,0x20,0x69,0x73,0x0d,0x0a,0x09,0x20,0x20,0x20,0x20,0x62,0x65,0x69,0x6e,
73
0x67,0x20,0x61,0x63,0x74,0x69,0x76,0x65,0x6c,0x79,0x20,0x64,0x65,0x76,0x65,0x6c,
74
0x6f,0x70,0x65,0x64,0x20,0x62,0x79,0x20,0x61,0x20,0x74,0x65,0x61,0x6d,0x20,0x6f,
75
0x66,0x20,0x64,0x65,0x76,0x65,0x6c,0x6f,0x70,0x65,0x72,0x73,0x0d,0x0a,0x09,0x20,
76
0x20,0x20,0x20,0x64,0x69,0x73,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x64,0x20,0x77,
77
0x6f,0x72,0x6c,0x64,0x2d,0x77,0x69,0x64,0x65,0x2e,0x20,0x53,0x69,0x6e,0x63,0x65,
78
0x20,0x69,0x74,0x27,0x73,0x20,0x72,0x65,0x6c,0x65,0x61,0x73,0x65,0x2c,0x20,0x6c,
79
0x77,0x49,0x50,0x20,0x68,0x61,0x73,0x0d,0x0a,0x09,0x20,0x20,0x20,0x20,0x73,0x70,
80
0x75,0x72,0x72,0x65,0x64,0x20,0x61,0x20,0x6c,0x6f,0x74,0x20,0x6f,0x66,0x20,0x69,
81
0x6e,0x74,0x65,0x72,0x65,0x73,0x74,0x20,0x61,0x6e,0x64,0x20,0x68,0x61,0x73,0x20,
82
0x62,0x65,0x65,0x6e,0x20,0x70,0x6f,0x72,0x74,0x65,0x64,0x20,0x74,0x6f,0x20,0x73,
83
0x65,0x76,0x65,0x72,0x61,0x6c,0x0d,0x0a,0x09,0x20,0x20,0x20,0x20,0x70,0x6c,0x61,
84
0x74,0x66,0x6f,0x72,0x6d,0x73,0x20,0x61,0x6e,0x64,0x20,0x6f,0x70,0x65,0x72,0x61,
85
0x74,0x69,0x6e,0x67,0x20,0x73,0x79,0x73,0x74,0x65,0x6d,0x73,0x2e,0x20,0x6c,0x77,
86
0x49,0x50,0x20,0x63,0x61,0x6e,0x20,0x62,0x65,0x20,0x75,0x73,0x65,0x64,0x20,0x65,
87
0x69,0x74,0x68,0x65,0x72,0x0d,0x0a,0x09,0x20,0x20,0x20,0x20,0x77,0x69,0x74,0x68,
88
0x20,0x6f,0x72,0x20,0x77,0x69,0x74,0x68,0x6f,0x75,0x74,0x20,0x61,0x6e,0x20,0x75,
89
0x6e,0x64,0x65,0x72,0x6c,0x79,0x69,0x6e,0x67,0x20,0x4f,0x53,0x2e,0x0d,0x0a,0x09,
90
0x20,0x20,0x3c,0x2f,0x70,0x3e,0x0d,0x0a,0x09,0x20,0x20,0x3c,0x70,0x3e,0x0d,0x0a,
91
0x09,0x20,0x20,0x20,0x20,0x54,0x68,0x65,0x20,0x66,0x6f,0x63,0x75,0x73,0x20,0x6f,
92
0x66,0x20,0x74,0x68,0x65,0x20,0x6c,0x77,0x49,0x50,0x20,0x54,0x43,0x50,0x2f,0x49,
93
0x50,0x20,0x69,0x6d,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x61,0x74,0x69,0x6f,0x6e,
94
0x20,0x69,0x73,0x20,0x74,0x6f,0x20,0x72,0x65,0x64,0x75,0x63,0x65,0x0d,0x0a,0x09,
95
0x20,0x20,0x20,0x20,0x74,0x68,0x65,0x20,0x52,0x41,0x4d,0x20,0x75,0x73,0x61,0x67,
96
0x65,0x20,0x77,0x68,0x69,0x6c,0x65,0x20,0x73,0x74,0x69,0x6c,0x6c,0x20,0x68,0x61,
97
0x76,0x69,0x6e,0x67,0x20,0x61,0x20,0x66,0x75,0x6c,0x6c,0x20,0x73,0x63,0x61,0x6c,
98
0x65,0x20,0x54,0x43,0x50,0x2e,0x20,0x54,0x68,0x69,0x73,0x0d,0x0a,0x09,0x20,0x20,
99
0x20,0x20,0x6d,0x61,0x6b,0x65,0x73,0x20,0x6c,0x77,0x49,0x50,0x20,0x73,0x75,0x69,
100
0x74,0x61,0x62,0x6c,0x65,0x20,0x66,0x6f,0x72,0x20,0x75,0x73,0x65,0x20,0x69,0x6e,
101
0x20,0x65,0x6d,0x62,0x65,0x64,0x64,0x65,0x64,0x20,0x73,0x79,0x73,0x74,0x65,0x6d,
102
0x73,0x20,0x77,0x69,0x74,0x68,0x20,0x74,0x65,0x6e,0x73,0x0d,0x0a,0x09,0x20,0x20,
103
0x20,0x20,0x6f,0x66,0x20,0x6b,0x69,0x6c,0x6f,0x62,0x79,0x74,0x65,0x73,0x20,0x6f,
104
0x66,0x20,0x66,0x72,0x65,0x65,0x20,0x52,0x41,0x4d,0x20,0x61,0x6e,0x64,0x20,0x72,
105
0x6f,0x6f,0x6d,0x20,0x66,0x6f,0x72,0x20,0x61,0x72,0x6f,0x75,0x6e,0x64,0x20,0x34,
106
0x30,0x20,0x6b,0x69,0x6c,0x6f,0x62,0x79,0x74,0x65,0x73,0x0d,0x0a,0x09,0x20,0x20,
107
0x20,0x20,0x6f,0x66,0x20,0x63,0x6f,0x64,0x65,0x20,0x52,0x4f,0x4d,0x2e,0x0d,0x0a,
108
0x09,0x20,0x20,0x3c,0x2f,0x70,0x3e,0x0d,0x0a,0x09,0x20,0x20,0x3c,0x70,0x3e,0x0d,
109
0x0a,0x09,0x20,0x20,0x20,0x20,0x4d,0x6f,0x72,0x65,0x20,0x69,0x6e,0x66,0x6f,0x72,
110
0x6d,0x61,0x74,0x69,0x6f,0x6e,0x20,0x61,0x62,0x6f,0x75,0x74,0x20,0x6c,0x77,0x49,
111
0x50,0x20,0x63,0x61,0x6e,0x20,0x62,0x65,0x20,0x66,0x6f,0x75,0x6e,0x64,0x20,0x61,
112
0x74,0x20,0x74,0x68,0x65,0x20,0x6c,0x77,0x49,0x50,0x0d,0x0a,0x09,0x20,0x20,0x20,
113
0x20,0x68,0x6f,0x6d,0x65,0x70,0x61,0x67,0x65,0x20,0x61,0x74,0x20,0x3c,0x61,0x0d,
114
0x0a,0x09,0x20,0x20,0x20,0x20,0x68,0x72,0x65,0x66,0x3d,0x22,0x68,0x74,0x74,0x70,
115
0x3a,0x2f,0x2f,0x73,0x61,0x76,0x61,0x6e,0x6e,0x61,0x68,0x2e,0x6e,0x6f,0x6e,0x67,
116
0x6e,0x75,0x2e,0x6f,0x72,0x67,0x2f,0x70,0x72,0x6f,0x6a,0x65,0x63,0x74,0x73,0x2f,
117
0x6c,0x77,0x69,0x70,0x2f,0x22,0x3e,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x73,0x61,
118
0x76,0x61,0x6e,0x6e,0x61,0x68,0x2e,0x6e,0x6f,0x6e,0x67,0x6e,0x75,0x2e,0x6f,0x72,
119
0x67,0x2f,0x70,0x72,0x6f,0x6a,0x65,0x63,0x74,0x73,0x2f,0x6c,0x77,0x69,0x70,0x2f,
120
0x3c,0x2f,0x61,0x3e,0x0d,0x0a,0x09,0x20,0x20,0x20,0x20,0x6f,0x72,0x20,0x61,0x74,
121
0x20,0x74,0x68,0x65,0x20,0x6c,0x77,0x49,0x50,0x20,0x77,0x69,0x6b,0x69,0x20,0x61,
122
0x74,0x20,0x3c,0x61,0x0d,0x0a,0x09,0x20,0x20,0x20,0x20,0x68,0x72,0x65,0x66,0x3d,
123
0x22,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x6c,0x77,0x69,0x70,0x2e,0x77,0x69,0x6b,
124
0x69,0x61,0x2e,0x63,0x6f,0x6d,0x2f,0x22,0x3e,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,
125
0x6c,0x77,0x69,0x70,0x2e,0x77,0x69,0x6b,0x69,0x61,0x2e,0x63,0x6f,0x6d,0x2f,0x3c,
126
0x2f,0x61,0x3e,0x2e,0x0d,0x0a,0x09,0x20,0x20,0x3c,0x2f,0x70,0x3e,0x0d,0x0a,0x09,
127
0x3c,0x2f,0x74,0x64,0x3e,0x3c,0x74,0x64,0x3e,0x0d,0x0a,0x09,0x20,0x20,0x26,0x6e,
128
0x62,0x73,0x70,0x3b,0x0d,0x0a,0x09,0x3c,0x2f,0x74,0x64,0x3e,0x3c,0x2f,0x74,0x72,
129
0x3e,0x0d,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x3c,0x2f,0x74,0x61,0x62,0x6c,0x65,
130
0x3e,0x0d,0x0a,0x3c,0x2f,0x62,0x6f,0x64,0x79,0x3e,0x0d,0x0a,0x3c,0x2f,0x68,0x74,
131
0x6d,0x6c,0x3e,0x0d,0x0a,0x0d,0x0a,
132
};

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

von Karl H. (kbuchegg)


Lesenswert?

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
1
  static const unsigned char data__index_html[] =
2
    "/index.html\x00"
3
    "HTTP/1.0 200 OK\r\n"
4
    "Server: lwIP/1.3.1 (http://savannah.nongnu.org/projects/lwip)\r\n"
5
    .... weitere Texte ....

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!

: Bearbeitet durch User
von Bitflüsterer (Gast)


Lesenswert?

> Wer so einen Unsinn verbrochen hat, sollte mit dem nassen
> Fetzen erschlagen werden!

Lieber mit einem Arduino. Das dauert länger.

von Kilian K. (kellermaaan)


Lesenswert?

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...

von Bitflüsterer (Gast)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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
:-)

von Bernd K. (movin)


Lesenswert?

Kilian K. schrieb:
> Und ehrlich gesagt hab ich jetzt nicht
> viel Lust dies per Hand wegzumachen!

notepad++ ist dein freund...

von Karl H. (kbuchegg)


Lesenswert?

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.

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

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.

von Kilian K. (kellermaaan)


Angehängte Dateien:

Lesenswert?

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...

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

Kilian K. schrieb:

> Hättest du vielleicht auch eine Idee, wie ich das dann in dem Code durch
> den lesbaren Text ersetzen kann?

Mit welchem Teil von
1
  static const unsigned char data__index_html[] =
2
    "/index.html\x00"
3
    "HTTP/1.0 200 OK\r\n"
4
    "Server: lwIP/1.3.1 (http://savannah.nongnu.org/projects/lwip)\r\n"
5
    .... weitere Texte ....
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.

von Karl H. (kbuchegg)


Lesenswert?

Den Teil hier
1
static const unsigned char data__img_sics_gif[] = {
2
/* /img/sics.gif (14 chars) */
3
0x2f,0x69,0x6d,0x67,0x2f,0x73,0x69,0x63,0x73,0x2e,0x67,0x69,0x66,0x00,0x00,0x00,
4
5
/* HTTP header */
6
/* "HTTP/1.0 200 OK
7
" (17 bytes) */
8
0x48,0x54,0x54,0x50,0x2f,0x31,0x2e,0x30,0x20,0x32,0x30,0x30,0x20,0x4f,0x4b,0x0d,
9
0x0a,
10
/* "Server: lwIP/1.3.1 (http://savannah.nongnu.org/projects/lwip)
11
" (63 bytes) */
12
0x53,0x65,0x72,0x76,0x65,0x72,0x3a,0x20,0x6c,0x77,0x49,0x50,0x2f,0x31,0x2e,0x33,
13
0x2e,0x31,0x20,0x28,0x68,0x74,0x74,0x70,0x3a,0x2f,0x2f,0x73,0x61,0x76,0x61,0x6e,
14
0x6e,0x61,0x68,0x2e,0x6e,0x6f,0x6e,0x67,0x6e,0x75,0x2e,0x6f,0x72,0x67,0x2f,0x70,
15
0x72,0x6f,0x6a,0x65,0x63,0x74,0x73,0x2f,0x6c,0x77,0x69,0x70,0x29,0x0d,0x0a,
16
/* "Content-type: image/gif
17
18
" (27 bytes) */
19
0x43,0x6f,0x6e,0x74,0x65,0x6e,0x74,0x2d,0x74,0x79,0x70,0x65,0x3a,0x20,0x69,0x6d,
20
0x61,0x67,0x65,0x2f,0x67,0x69,0x66,0x0d,0x0a,0x0d,0x0a,
21
/* raw file data (724 bytes) */
22
0x47,0x49,0x46,0x38,0x39,0x61,0x46,0x00,0x22,0x00
23
...
belässt du so wie er ist. Das ist offenbar ein Bild. Da gewinnst du 
nichts, wenn du das in Text überführst.

von Karl H. (kbuchegg)


Lesenswert?

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.

von A. H. (ah8)


Lesenswert?

Ich hätt's erst mal so probiert:

1
#include <stdio.h>
2
3
static const unsigned char data__index_html[] = {
4
     , '\0' // <--! 
5
};
6
7
main()
8
{
9
        printf("%s\n", data__index_html);
10
}


Geht natürlich etwas schief, da schon im Text ein '\0' steht, aber man 
sieht erst mal was und man kann's ja ausbauen:

1
#include <stdio.h>
2
#include <ctype.h>
3
4
static const unsigned char data__index_html[] = {
5
  
6
};
7
8
main()
9
{
10
  int i;
11
  for (i=0; i<sizeof(data__index_html)/sizeof(*data__index_html); ++i)
12
    putchar(isprint(data__index_html[i])? data__index_html[i]:'.');
13
  printf("\n");
14
}


In die andere Richtung geht’s natürlich auch. Aber wie schon gesagt, das 
ist weder nötig noch besonders geschickt. (Vorsichtig formuliert :-)

von Karl H. (kbuchegg)


Lesenswert?

Interessant ist, dass der Autor selber das hier
1
static const unsigned char data__index_html[] PROGMEM = {
2
///* /index.html (12 chars) */
3
//0x2f,0x69,0x6e,0x64,0x65,0x78,0x2e,0x68,0x74,0x6d,0x6c,0x00,
4
//
5
///* HTTP header */
6
....

zu dem hier 'übersetzt' hat
1
"index.html\r\n"

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.

von Karl H. (kbuchegg)


Lesenswert?

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:
1
   for (i=0; i<sizeof(data__index_html)/sizeof(*data__index_html); ++i) {
2
     if( data__index_html[i] == 0x00 )
3
       printf( "\\0" );
4
     else if( data__index_html[i] == 0x0D )
5
       printf( "\\r" );
6
     else if( data__index_html[i] == 0x0A )
7
       pritnf( "\\n\"\n\"" );
8
9
     else if( isprint( data__index_html[i] )
10
       putchar( data__index_html[i] );
11
12
     else
13
       putchar( '?' );
14
   }
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.

: Bearbeitet durch User
von Daniel A. (daniel-a)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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.

von A. H. (ah8)


Lesenswert?

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 :-)

von A. H. (ah8)


Lesenswert?

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.

: Bearbeitet durch User
von Kilian K. (kellermaaan)


Lesenswert?

1
"<body bgcolor="white" text="black">\r\n"
Wie mache ich es denn wenn ich wie hier so Design Sachen habe? Da 
meckert er jetzt wegen dem "white"...

von Karl H. (kbuchegg)


Lesenswert?

Kilian K. schrieb:
>
1
"<body bgcolor="white" text="black">\r\n"
> 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
...

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

Karl Heinz schrieb:
> Kilian K. schrieb:
>>
1
"<body bgcolor="white" text="black">\r\n"
>> 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)
1
   for (i=0; i<sizeof(data__index_html)/sizeof(*data__index_html); ++i) {
2
     if( data__index_html[i] == 0x00 )
3
       printf( "\\0" );
4
     else if( data__index_html[i] == '"' )
5
       printf( "\\\"" );
6
     else if( data__index_html[i] == 0x0D )
7
       printf( "\\r" );
8
     else if( data__index_html[i] == 0x0A )
9
       pritnf( "\\n\"\n\"" );
10
11
     else if( isprint( data__index_html[i] )
12
       putchar( data__index_html[i] );
13
14
     else
15
       putchar( '?' );
16
   }

und nochmal generieren lassen.

von Eric B. (beric)


Lesenswert?

Karl Heinz schrieb:
> Kilian K. schrieb:
>>
1
"<body bgcolor="white" text="black">\r\n"
>> 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:
1
"<body bgcolor='white' text='black'>\r\n"
Dann brauchste nix escapen :-)

von Joachim B. (jar)


Lesenswert?

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

: Bearbeitet durch User
von Kilian K. (kellermaaan)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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.

von Karl H. (kbuchegg)


Angehängte Dateien:

Lesenswert?

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 
:-)

von Daniel A. (daniel-a)


Lesenswert?

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:
1
fwrite(data__index_html, 1, sizeof(data__index_html), stdout);

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.