0
this class을 사용하여 텍스트를 base64로 인코딩/디코딩합니다. 최대 512 개의 MAX_LEN에서 정상적으로 작동하지만 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는 표시되지 않습니다. 어느 쪽도 디코드 기능이 아닙니다. 우리는 이것보다 더 많은 정보가 필요합니다. –
dst가 어디에 설정되어 있는지 알 수는 없지만 MAX_LENGTH <512 인 경우 잘 작동하지만 1024는 그렇지 않습니다. 나는 여기에 왜 그것을 게시 할 것인지에 대한 강조를하지 않는다. – flyout
dst는 전역입니다. eeeeeeek! –