hex -> text und andersrum konvertieren

#4055466
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
#4055481
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!
#4055493
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...
Gast #4055499
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.
#4055502
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
:-)
#4055508
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.
#4055514
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...
Angehängte Dateien:
#4055522
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.
#4055527
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.
#4055536
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 :-)
#4055538
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.
#4055550
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.
#4055575
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.
#4055584
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.
#4055614
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.
#4055652
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
...
#4055656
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.
#4055688
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 :-)
#4055702
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
#4055796
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
#4055802
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.
#4056276
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);

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