c/c++ base64

08/03/2008 - 21:14 von christian schaas | Report spam
hi,

Ich würd gerne mal base64 Implementieren und hab folgenden
Code, der encoder funktioniert.

Nur leider funktioniert der decoder nicht, ich weiß leider
nicht warum, vllt. findet jemand nen Fehler.

#include <stdio.h>
#include <stdlib.h>

static const char
base64ABC[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";

void encode( unsigned char in[3], unsigned char out[4], int len ) {

out[0] = base64ABC[ in[0] >> 2 ];
out[1] = base64ABC[ ((in[0] & 0x03) << 4) | ((in[1] & 0xf0) >>
4) ];
out[2] = (unsigned char) base64ABC[ ((in[1] & 0x0f) << 2) |
((in[2] & 0xc0) >> 6) ];
out[3] = (unsigned char) base64ABC[ in[2] & 0x3f ];
}

void decode( unsigned char in[4], unsigned char out[3] ) {

out[0] = (unsigned char ) (in[0] << 2 | in[1] >> 4);
out[1] = (unsigned char ) (in[1] << 4 | in[2] >> 2);
out[2] = (unsigned char ) (((in[2] << 6) & 0xc0) | in[3]);
}


int main() {

unsigned char test[3] = {'a', 'b', 'c'};

unsigned char base64[4];
unsigned char ascii[3];

encode(test, base64, 3);
printf("%c %c %c %c", base64[0], base64[1], base64[2],
base64[3]);

decode(base64, ascii);
printf("%c %c %c", ascii[0], ascii[1], ascii[2]);

return 0;
}

Ich hab mit Absicht, die Implementierung von Fuellbits weg-
gelassen um die Funktion erstmal zu testen aber wie gesagt
beim decodieren bekomm ich immer etwas falsches raus.

Hab des ganze mit dem gcc kompiliert.
 

Lesen sie die antworten

#1 christian schaas
08/03/2008 - 22:20 | Warnen spam
Hat sich erledigt - ich idiot hab vergessen erst die
base64 chars wieder auf die entsprechenden zahlen
abzubilden.

Ähnliche fragen