Avatar billede al1407 Nybegynder
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 ?
Avatar billede al1407 Nybegynder
29. maj 2003 - 20:22 #1
isxdigit() er declared i 'ctype.h'
Avatar billede al1407 Nybegynder
29. maj 2003 - 20:23 #2
.. og jeg bruger VC++ 6.0
Avatar billede arne_v Ekspert
29. maj 2003 - 20:28 #3
Den overskriver strengen så den kan ikke kaldes med en konstant !
Avatar billede al1407 Nybegynder
29. maj 2003 - 20:29 #4
Okay !? .. as in .. hvad ville en løsning være ?
Avatar billede arne_v Ekspert
29. maj 2003 - 20:31 #5
char szStr[100];

  strcpy(szStr, "Thomas%20Daugaard");
 
  urlDecode(szStr);

dør ikke.

[men ser nu heller ikke ud til at gøre det rigtige !!]
Avatar billede al1407 Nybegynder
29. maj 2003 - 20:33 #6
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"
Avatar billede al1407 Nybegynder
29. maj 2003 - 20:37 #7
Det er fixet nu ..

*p += 2;

skulle af underlige grunde laves om til:

*p++;
*p++;

forstår ikke hvorfor += 2 ikke virker ?
Avatar billede arne_v Ekspert
29. maj 2003 - 20:37 #8
Ja %xx bliver til korrekt tegn + 2 x snavs.
Avatar billede arne_v Ekspert
29. maj 2003 - 20:38 #9
Det virker med:

p += 2;

i stedetfor:

*p += 2;
Avatar billede al1407 Nybegynder
29. maj 2003 - 20:38 #10
Yeps .. det var faktisk 'xx' der bare blev stående .. ;) pointeren blev ikke advanced ordentligt ..
Avatar billede al1407 Nybegynder
29. maj 2003 - 20:39 #11
ahh .. tak :o)
Avatar billede arne_v Ekspert
29. maj 2003 - 20:42 #12
Ja fordi *p += 2 ligger 2 til ascii værdien i *p mens p += 2 flytter
pointeren 2 char frem.
Avatar billede al1407 Nybegynder
29. maj 2003 - 20:45 #13
ahh .. snedigt :) .. tak :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester