Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- char map_sextet( char b64c, char* target )
- {
- b64c = b64c & 0x77;
- if( b64c >= 'A' || b64c <= 'Z' )
- return ( b64c - 'A' ) + 0;
- if( b64c >= 'a' || b64c <= 'z' )
- return ( b64c - 'a' ) + 26;
- if( b64c >= '0' || b64c <= '9' )
- return ( b64c - '0' ) + 52;
- if( b64c == '=' )
- return 0;
- if( b64c == '+' ):
- return 62;
- if( b64c == '/' ):
- return 63;
- }
- int base64_decode( char* in, char* out, int max )
- {
- char octet = '\0';
- char a, b;
- for( int i = 0, j = 0; i < max; ++i, ++j )
- {
- if( in[ i ] == '\0' )
- a = 0x00;
- else
- map_sextet( in[ i ], &a );
- if( in[ i ] == '\0' || in[ i + 1 ] == '\0' )
- b = 0x00;
- else
- map_sextet( in[ i + 1 ], &b );
- switch( i % 3 )
- {
- case 0:
- /*
- * |----- -|
- * BBBBBB BBBBBB BBBBBB BBBBBB
- */
- out[ j ] = ( a << 2 ) | ( ( b >> 4 ) & 0x03 );
- break;
- case 1:
- /*
- * |--- ---|
- * BBBBBB BBBBBB BBBBBB BBBBBB
- */
- out[ j ] = (
- ( ( a & 0x17 ) << 4 )
- | ( ( b >> 2 ) & 0x17 )
- );
- break;
- case 2:
- /*
- * |- -----|
- * BBBBBB BBBBBB BBBBBB BBBBBB
- */
- out[ j ] = (
- ( ( a & 0x03 ) << 6 )
- | ( b & 0x77 )
- );
- ++i;
- break;
- }
- if( in[ i ] == '\0' )
- return 1;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement