Алгоритм декодирования Base64 (срочно)
|
От: |
dongyi
|
|
| Дата: | 15.07.11 09:24 |
|
Оценка: |
-3
|
поделитесь функцией декодирования Base64 на plain C++.
спасибо.
Re: Алгоритм декодирования Base64 (срочно)
|
От: |
boot
|
|
| Дата: | 15.07.11 09:32 |
|
Оценка: |
|
Здравствуйте, dongyi, Вы писали:
D>поделитесь функцией декодирования Base64 на plain C++.
D>спасибо.
здесь
Жизнеспособность прямо пропорциональна простоте!
Re: Алгоритм декодирования Base64 (срочно)
|
От: |
ilnar
|
|
| Дата: | 15.07.11 09:33 |
|
Оценка: |
|
Здравствуйте, dongyi, Вы писали:
D>поделитесь функцией декодирования Base64 на plain C++.
D>спасибо.
http://g.zeos.in/?q=base64%20decode%20c%2B%2B
Re: Алгоритм декодирования Base64 (срочно)
Здравствуйте, dongyi, Вы писали:
D>поделитесь функцией декодирования Base64 на plain C++.
D>спасибо.
boost::iterators
С моими последними правками:
тутАвтор: nen777w
Дата: 13.07.11
Пример использовния в предидущем посте:
тутАвтор: nen777w
Дата: 23.06.11
Re: Алгоритм декодирования Base64 (срочно)
|
От: |
dongyi
|
|
| Дата: | 15.07.11 12:00 |
|
Оценка: |
|
//
// Base64Encode
//
// Encodes string in base64
//
static char charBase64[] = {
'A','B','C','D','E','F','G','H','I','J','K','L','M ','N','O','P',
'Q','R','S','T','U','V','W','X','Y','Z','a','b','c ','d','e','f',
'g','h','i','j','k','l','m','n','o','p','q','r','s ','t','u','v',
'w','x','y','z','0','1','2','3','4','5','6','7','8 ','9','+','/'
};
ULONG
Base64Encode (
LPTSTR lpszInputString,
LPTSTR lpOutputBuffer,
SIZE_T nMaxLength
)
{
char chr[3], enc[4];
int outpos = 0;
for( int i=0; i<lstrlen(lpszInputString); i+=3 )
{
if( outpos+4 >= nMaxLength )
break;
chr[0] = lpszInputString[i];
chr[1] = lpszInputString[i+1];
chr[2] = lpszInputString[i+2];
enc[0] = chr[0] >> 2;
enc[1] = ((chr[0] & 0x03) << 4) | (chr[1] >> 4);
enc[2] = ((chr[1] & 0x0F) << 2) | (chr[2] >> 6);
enc[3] = chr[2] & 0x3F;
lpOutputBuffer[outpos++] = charBase64[enc[0]];
lpOutputBuffer[outpos++] = charBase64[enc[1]];
if( i+1 >= lstrlen(lpszInputString) )
{
lpOutputBuffer[outpos++] = '=';
lpOutputBuffer[outpos++] = '=';
}
else if( i+2 >= lstrlen(lpszInputString) )
{
lpOutputBuffer[outpos++] = charBase64[enc[2]];
lpOutputBuffer[outpos++] = '=';
}
else
{
lpOutputBuffer[outpos++] = charBase64[enc[2]];
lpOutputBuffer[outpos++] = charBase64[enc[3]];
}
}
lpOutputBuffer[outpos] = 0;
return outpos;
}
//
// Base64Decode
//
// Decodes string from base64
//
static int indexBase64[] = {
-1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
-1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
-1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,62, -1,-1,-1,63,
52,53,54,55, 56,57,58,59, 60,61,-1,-1, -1,-1,-1,-1,
-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14,
15,16,17,18, 19,20,21,22, 23,24,25,-1, -1,-1,-1,-1,
-1,26,27,28, 29,30,31,32, 33,34,35,36, 37,38,39,40,
41,42,43,44, 45,46,47,48, 49,50,51,-1, -1,-1,-1,-1,
-1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
-1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
-1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
-1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
-1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
-1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
-1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1,
-1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1, -1,-1,-1,-1
};
ULONG
Base64Decode (
LPTSTR lpszInputString,
LPTSTR lpOutputBuffer,
SIZE_T nMaxLength
)
{
char chr[3], enc[4];
int outpos = 0;
for( int i=0; i<lstrlen(lpszInputString); i+=4 )
{
if( outpos+3 >= nMaxLength )
break;
enc[0] = indexBase64[lpszInputString[i]];
enc[1] = indexBase64[lpszInputString[i+1]];
enc[2] = indexBase64[lpszInputString[i+2]];
enc[3] = indexBase64[lpszInputString[i+3]];
if( enc[0] == -1 || enc[1] == -1 )
break;
chr[0] = (enc[0] << 2) | (enc[1] >> 4);
chr[1] = ((enc[1] & 15) << 4) | (enc[2] >> 2);
chr[2] = ((enc[2] & 3) << 6) | enc[3];
lpOutputBuffer[outpos++] = chr[0];
if( enc[2] != -1 )
{
lpOutputBuffer[outpos++] = chr[1];
}
if( enc[3] != -1 )
{
lpOutputBuffer[outpos++] = chr[2];
}
}
lpOutputBuffer[outpos] = 0;
return outpos;
}
Пока на собственное сообщение не было ответов, его можно удалить.