2008-12-05 12 views
1

J'ai une fonction qui décode les données base64 encodées dans les données binaires mais je ne sais pas comment trouver la longueur des données décodées. J'utilise les fonctions BIO dans openssl.Comment trouver la taille des données base64 décodées dans C

unsigned char *unbase64(unsigned char *input, int length) 
{ 
    BIO *b64, *bmem; 

    unsigned char *buffer = (unsigned char *)malloc(length); 
    memset(buffer, 0, length); 

    b64 = BIO_new(BIO_f_base64()); 
    bmem = BIO_new_mem_buf(input, length); 
    bmem = BIO_push(b64, bmem); 

    BIO_read(bmem, buffer, length); 

    BIO_free_all(bmem); 

    return buffer; 
} 
+0

BTW: Vous pouvez utiliser calloc() à la place de malloc() + memset(). – stesch

+0

Ne pas convertir la valeur de retour de malloc() en C. Le compilateur n'a pas besoin de cela, et il peut cacher une erreur. – unwind

+0

Le retour à l'incantation de malloc semble être requis dans Visual C++ (au moins en 2010). Bien que ce soit bizarre - l'IDE se plaint mais il compile encore. –

Répondre

3

BIO_read renvoie le nombre d'octets lus. Vous devriez vérifier les valeurs de retour tout au long, de toute façon.