29. maj 2003 - 20:22
Der er
12 kommentarer og 1 løsning
urlDecode() funktion virker ikke
Jeg har fundet flg. kode på nettet, men det virker ikke .. crasher programmet når den køres. void urlDecode (char *p) { char *pD = p; while (*p) { if (*p == '%') { p++; if (isxdigit(p[0]) && isxdigit(p[1])) { *pD++ = (char)TwoHex2Int(p); *p += 2; } } else { *pD++ = *p++; } } *pD = '\0'; } static int TwoHex2Int(char *pC) { int Hi, Lo, Result; Hi = pC[0]; if('0' <= Hi && Hi <= '9') Hi -= '0'; else if('a' <= Hi && Hi <= 'f') Hi -= ('a' - 10); else if('A' <= Hi && Hi <= 'F') Hi -= ('A' - 10); Lo = pC[1]; if('0' <= Lo && Lo <= '9') Lo -= '0'; else if('a' <= Lo && Lo <= 'f') Lo -= ('a' - 10); else if('A' <= Lo && Lo <= 'F') Lo -= ('A' - 10); Result = Lo + 16 * Hi; return(Result); } char *szStr = "Thomas%20Daugaard"; urlDecode(szStr); burde gerne virke, men det gør det ikke. Nogle ideer ? Eller er der nogle der har en urlDecode() funktion der virker ?
Annonceindlæg tema
Cloud & AI
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
isxdigit() er declared i 'ctype.h'
.. og jeg bruger VC++ 6.0
Den overskriver strengen så den kan ikke kaldes med en konstant !
Okay !? .. as in .. hvad ville en løsning være ?
char szStr[100]; strcpy(szStr, "Thomas%20Daugaard"); urlDecode(szStr); dør ikke. [men ser nu heller ikke ud til at gøre det rigtige !!]
Hmm .. nu "virker" det ... men funktionen ser lidt "faulty" ud på outputtet .. Min input er: "C%3A%5CWINDOWS%5CHolly%20Valance%20%281280x960%29.bmp" Output: "C:5A\7CWINDOWS\7CHolly 40Valance 40(481280x960)49.bmp"
Det er fixet nu .. *p += 2; skulle af underlige grunde laves om til: *p++; *p++; forstår ikke hvorfor += 2 ikke virker ?
Ja %xx bliver til korrekt tegn + 2 x snavs.
Det virker med: p += 2; i stedetfor: *p += 2;
Yeps .. det var faktisk 'xx' der bare blev stående .. ;) pointeren blev ikke advanced ordentligt ..
Ja fordi *p += 2 ligger 2 til ascii værdien i *p mens p += 2 flytter pointeren 2 char frem.
ahh .. snedigt :) .. tak :)
Kurser inden for grundlæggende programmering