简单的base64解码不起作用:(

| 我一直在尝试使用以下代码对base *输入char *进行base64解码。 \“ msg \”的值似乎是一个空字符串:(
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <openssl/bn.h>
#include <openssl/bio.h>
#include <openssl/objects.h>
#include <openssl/pem.h>
#include <openssl/objects.h>

// reads b64 encoded msg (pReadBuffer) and writes to pWriiteFile.
char *  dgstdecode(char *pReadBuffer, int pLength)
{
     char *msg = (char *)malloc(pLength);
    memset(msg, 0x00, pLength);
    int readbytes = -1;

    printf(\"inside dgstdecode\\n\");
    printf(\"\\n pReadBuffer = %s \\n\", pReadBuffer);
    BIO *b64, *bio = NULL;
    b64 = BIO_new(BIO_f_base64());
    bio = BIO_new_mem_buf(pReadBuffer, pLength);
    bio = BIO_push(b64, bio);
   //BIO_set_flags(bio,BIO_FLAGS_BASE64_NO_NL);

    while ((readbytes = BIO_read(bio, msg, pLength)) > 0)
    {
    printf(\"readbytes:  %d\\n\", readbytes);
    printf(\"inside dgstdecode\\n\");
    }
    BIO_flush(bio);
    printf(\"msg = %s\\n\", msg);
    BIO_free_all(bio);
    //BIO_free_all(b64);
    return msg;

}


int main(int argc, char *argv[])
{
    int i = 0;
    char buff [9] =\"aGVsbG8K\" ;
    //memset(buff, 0, 9);
    char* ptr ;
    ptr = (char*)malloc(9);

    for(i =0;i < 4; i++){

        buff[9] = \'\\0\';

        printf(\"strlen buff = %d\\n\", strlen(buff));
        ptr = dgstdecode(buff, 9);
        printf(\"ptr = %s\\n\", ptr);
    }

    return 0;

}
已邀请:
对不起!这是正确的方法。我刚刚清理了主要功能:
int main(int argc, char *argv[])
{
    int i = 0;
    char buff [] =\"aGVsbG8K\\n\\0\" ;
    char* ptr ;

    for(i =0;i < 4; i++){

        printf(\"strlen buff = %d\\n\", strlen(buff));
        ptr = dgstdecode(buff, strlen(buff));
        printf(\"ptr = %s\\n\", ptr);
        printf(\"\\n\");
    }

    return 0;
}
我的输出现在是(仍在删除/ n东西): 迷迷状态= 9 内部dgstdecode pReadBuffer = aGVsbG8K 读取字节数:6 内部dgstdecode msg =你好 ptr =你好 迷迷状态= 9 内部dgstdecode pReadBuffer = aGVsbG8K 读取字节数:6 内部dgstdecode msg =你好 ptr =你好 迷迷状态= 9 内部dgstdecode pReadBuffer = aGVsbG8K 读取字节数:6 内部dgstdecode msg =你好 ptr =你好 迷迷状态= 9 内部dgstdecode pReadBuffer = aGVsbG8K 读取字节数:6 内部dgstdecode msg =你好 ptr =你好 忽略我的原始回复如下:
bio = BIO_push(b64, bio);
线似乎是罪魁祸首。它似乎覆盖了参考。这是我注释掉该行后的输出(编辑器似乎删除了一些/ n \):
strlen buff = 8
inside dgstdecode

 pReadBuffer = aGVsbG8K 
readbytes:  9
inside dgstdecode
msg = aGVsbG8K
ptr = aGVsbG8K

strlen buff = 8
inside dgstdecode

 pReadBuffer = aGVsbG8K 
readbytes:  9
inside dgstdecode
msg = aGVsbG8K
ptr = aGVsbG8K

strlen buff = 8
inside dgstdecode

 pReadBuffer = aGVsbG8K 
readbytes:  9
inside dgstdecode
msg = aGVsbG8K
ptr = aGVsbG8K

strlen buff = 8
inside dgstdecode

 pReadBuffer = aGVsbG8K 
readbytes:  9
inside dgstdecode
msg = aGVsbG8K
ptr = aGVsbG8K

要回复问题请先登录注册