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