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;
}
为什么可能会造成这个?
变量dst未显示;解码功能也不是。我们需要比这更多的信息。 – 2010-05-26 03:38:19
我不知道dst是在哪设置的,但是MAX_LENGTH <512它可以正常工作,但1024不会。我没有认识到这就是为什么我在这里发布它的功能。 – flyout 2010-05-26 03:42:48
dst是全球性的; eeeeeeek! – 2010-05-26 03:48:54