Steuerzeichen in String suchen
-
Hi, folgendes Problem:
Ich habe einen String, den ich mir in eine Datei schreiben lasse. Gucke ich mir diese Datei im Hex-Editor an, so sehe ich, dass mittendrin einige 0d zuviel sind. Wie kann ich diese nun aus dem String entfernen, bevor ich die Datei schreibe?
Mein Problem ist, dass ich nicht weiß, wie ich ausdrücken soll, dass er nach 0x0d suchen soll und dieses zeichen dann löschen soll.Vielleicht weiß aber auch jemand, woher diese 0d kommen:
ich hab mir n socket gebaut und alles funktioniert, die pakete werden abgeholt.
strcpy (buf,"GET /code...");
send(s,buf,strlen(buf),0);
rc=recv(s,buf,10000,0);laut Sniffer kommt folgendes an:
00000000 48 54 54 50 2f 31 2e 31 20 32 30 30 20 4f 4b 0d HTTP/1.1 200 OK.
00000010 0a 44 61 74 65 3a 20 57 65 64 2c 20 31 32 20 4d .Date: Wed, 12 M
uswaber in der Datei wird folgendes gespeichert:
00000000 48 54 54 50 2f 31 2e 31 20 32 30 30 20 4f 4b 0d HTTP/1.1 200 OK.
00000010 0d 0a 44 61 74 65 3a 20 57 65 64 2c 20 31 32 20 ..Date: Wed, 12
uswer schiebt also vor jedes 0d0a ein zusätzliches 0d ein. Dieses möchte ich gern loswerden.
Hat einer ne Idee?
-
Hallo,
vermutlich schreibst du unter Windows im Textmodus, dann zaubert dir Windows vor jedes '\n' (0x0a) ein '\r' (0x0d).
Das kannst du loswerden, indem du im Binärmodus schreibst.Gruß,
B.B.
-
kellerkend schrieb:
Hat einer ne Idee?
Lass mich raten: es ist ein Windows-System. Das hat nämlich solche Hirnschäden, macht in Textstreams aus jedem \n (0a) ein \r\n (0d 0a). Dagegen hilft, den Stream binär zu mappen (
fopen(..., "wb")
).Das HTTP hat übrigens auch gerne mal ein \r\n, da kann man sich schön verwirren.
-
coole Sache.. ich werd mit euren Tips mal versuchen, meinem Windows die Hirnschäden auszutreiben
-
mngbd schrieb:
kellerkend schrieb:
Hat einer ne Idee?
Lass mich raten: es ist ein Windows-System. Das hat nämlich solche Hirnschäden, macht in Textstreams aus jedem \n (0a) ein \r\n (0d 0a). Dagegen hilft, den Stream binär zu mappen (
fopen(..., "wb")
).Das HTTP hat übrigens auch gerne mal ein \r\n, da kann man sich schön verwirren.
\r\n ist bei Netzwerkprotokollen häufig anzutreffen, auch HTTP verwendet diese. Man sollte aber aus Kompatibilitätsgründen nicht darauf wetten, dass das überall auch so umgesetzt ist.
-
gfhfgh schrieb:
\r\n ist bei Netzwerkprotokollen häufig anzutreffen, auch HTTP verwendet diese. Man sollte aber aus Kompatibilitätsgründen nicht darauf wetten, dass das überall auch so umgesetzt ist.
Wie jetzt? Meinst du Leute, die beim Senden das \r weglassen? Die muss man nicht ernstnehmen:
http://www.w3.org/Protocols/rfc2616/rfc2616-sec2.html#sec2.2Oder meinst du Leute, die ein eingehendes \r einfach ignorieren und sich nur auf das \n verlassen? Das ist der richtige Weg, aber Kompatibilitätsprobleme tauchen da nicht auf:
http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html#sec19.3