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 fra NetNordic
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