2010-05-26 49 views
0

我正在使用this class将文本编码/解码为base64。 它可以正常工作,MAX_LEN最高512,但是如果我将它增加到1024,解码函数返回并为空var。为什么这个base64函数在增加最大长度时停止工作?

这是函数:

char* Base64::decode(char *src) 
{ 
    unsigned six, dix; 
    unsigned int d_len = MAX_LEN; 

    memset(dst,'\0', MAX_LEN); 

    unsigned s_len = strlen(src); 
    dix = 0; 

    for (six = 0; six < s_len; six += 4) 
    { 
     unsigned long sr; 
     unsigned ix; 

     sr = 0; 
     for (ix = 0; ix < 4; ++ix) 
     { 
      int sextet; 

      if (six+ix >= s_len) 
       return NULL; 
      if ((sextet = tlu(*(src+six+ix))) < 0) 
       break; 
      sr <<= 6; 
      sr |= (sextet & 0x3f); 
     } 

     switch (ix) 
     { 
      case 0: // end of data, no padding 
       return 0; 

      case 1: // can't happen 
       return NULL; 

      case 2: // 1 result byte 
       sr >>= 4; 
       if (dix > d_len) return NULL; 
       *(dst+dix) = (sr & 0xff); 
       ++dix; 
       break; 
      case 3: // 2 result bytes 
       sr >>= 2; 
       if (dix+1 > d_len) return NULL; 
       *(dst+dix+1) = (sr & 0xff); 
       sr >>= 8; 
       *(dst+dix) = (sr & 0xff); 
       dix += 2; 
       break; 
      case 4: // 3 result bytes 
       if (dix+2 > d_len) return NULL; 
       *(dst+dix+2) = (sr & 0xff); 
       sr >>= 8; 
       *(dst+dix+1) = (sr & 0xff); 
       sr >>= 8; 
       *(dst+dix) = (sr & 0xff); 
       dix += 3; 
       break; 
     } 
    } 

    return dst; 
} 

为什么可能会造成这个?

+1

变量dst未显示;解码功能也不是。我们需要比这更多的信息。 – 2010-05-26 03:38:19

+0

我不知道dst是在哪设置的,但是MAX_LENGTH <512它可以正常工作,但1024不会。我没有认识到这就是为什么我在这里发布它的功能。 – flyout 2010-05-26 03:42:48

+0

dst是全球性的; eeeeeeek! – 2010-05-26 03:48:54

回答

0

赔率是dst大小不正确,以容纳所有1024字节。如果没有看到dst的声明,则无法确定。

相关问题