C problem hexescaping eines Strings
Hi, irgendwie bin ich zu dumm für diese Welt. Ich habe in einem Perlprogramm folgendes Konstrukt benutzt, um hexescapes eines Strings zu erhalten: unpack("H*", $string); aus der manpage dazu: "unpack" does the reverse of "pack": it takes a string and expands it out into a list of values. (In scalar context, it returns merely the first value produced.) %H A hex string (high nybble first). Das würde ich jetzt auch gern in C tun. Habe schon diverse Quellen inkl. google abgesucht, da finde ich aber nichts. Scheinbar der falsche Ansatz. Mein Code: aus main: char * field = NULL; field = "langer_String"; // und jetzt?? Vielen Dank für das Öffnen der Augen Volker -- Volker Kroll 4mino AG Chief System Developer Chausseestr. 52 b volker.kroll@4mino.de D-10115 Berlin Tel.: +49-30-2888490-0 Fax.: +49-30-2888490-99
On Wed, 17 Jul 2002 at 20:05 (+0200), Volker Kroll wrote:
irgendwie bin ich zu dumm für diese Welt. Ich habe in einem Perlprogramm folgendes Konstrukt benutzt, um hexescapes eines Strings zu erhalten: unpack("H*", $string); aus der manpage dazu: "unpack" does the reverse of "pack": it takes a string and expands it out into a list of values. (In scalar context, it returns merely the first value produced.) %H A hex string (high nybble first).
Das würde ich jetzt auch gern in C tun. Habe schon diverse Quellen inkl. google abgesucht, da finde ich aber nichts. Scheinbar der falsche Ansatz. Mein Code: aus main: char * field = NULL; field = "langer_String";
// und jetzt??
Vielen Dank für das Öffnen der Augen
So auf die Schnelle ohne jede Garantie auf irgendwelche Fehler:
,----[ test.c ]-
| #include
Hi Bernhard, On Wed, 2002-07-17 at 20:39, Bernhard Walle wrote:
So auf die Schnelle ohne jede Garantie auf irgendwelche Fehler:
das sieht mir so aus, als wenn es exakt das wäre, wonach ich gesucht hatte. Vielen Dank, dann kann ich jetzt ja nach Hause gehen, ohne den ganzen verbleibenden Abend grübeln zu müssen Volker -- Volker Kroll 4mino AG Chief System Developer Chausseestr. 52 b volker.kroll@4mino.de D-10115 Berlin Tel.: +49-30-2888490-0 Fax.: +49-30-2888490-99
On Mit, 17 Jul 2002 at 20:39 (+0200), Bernhard Walle wrote:
On Wed, 17 Jul 2002 at 20:05 (+0200), Volker Kroll wrote:
irgendwie bin ich zu dumm für diese Welt. Ich habe in einem Perlprogramm folgendes Konstrukt benutzt, um hexescapes eines Strings zu erhalten: unpack("H*", $string); [...] Das würde ich jetzt auch gern in C tun. Habe schon diverse Quellen inkl. google abgesucht, da finde ich aber nichts. Scheinbar der falsche Ansatz. Mein Code: aus main: char * field = NULL; field = "langer_String";
// und jetzt??
Vielen Dank für das Öffnen der Augen
So auf die Schnelle ohne jede Garantie auf irgendwelche Fehler:
,----[ test.c ]- [...]
Ohne Verwendung von strings.h habe ich das mal so ähnlich wie unten
gemacht (nur Fragmente):
<Schnipsel>
#define HD(c) ((c) < 10 ? (c) + 48 : (c) + 55)
void unpack (char *from, char *to) {
while (*from) {
*(to ++) = HD ((from & 0xf0) >> 4);
*(to ++) = HD (from & 0x0f);
from ++;
}
}
</Schnipsel>
Dazu müssen die Strings from und to natürlich bereits ausreichend
initialisiert sein (wie Bernhard es in seiner Lösung gemacht hat).
Zurück geht es dann übrigens so:
<Schnipsel>
#define DH(c) ((c) >'9' ? (c) - 'A' + 10 : (c) - '0')
void pack (char *from, char *to) {
while (*from) {
*(to ++) = (DH (*from) << 4) | DH (*(from + 1));
from += 2;
}
}
</Schnipsel>
Zum Ausprobieren:
<Beginn Demo>
#include
Volker Kroll
Das würde ich jetzt auch gern in C tun. Habe schon diverse Quellen inkl. google abgesucht, da finde ich aber nichts. Scheinbar der falsche Ansatz.
Mein Code: aus main: char * field = NULL; field = "langer_String";
// und jetzt??
Je nach dem, wie gross die Zahl werden kann, eine der strtoX (X=
l,ul,ll, ull) Funktionen ;-)
Das könnte dann so aussehen:
-----------------------------
#include
participants (4)
-
Bernhard Walle
-
Jan.Trippler@t-online.de
-
Philipp Thomas
-
Volker Kroll