我有一个给定的缓冲区:
unsigned char *buffer;
int buffer_length;
这是我目前将其转换为base64编码缓冲区的方法:
BIO *mem = BIO_new(BIO_s_mem());
BIO *b64 = BIO_new(BIO_f_base64());
mem = BIO_push(b64, mem);
int write_length = BIO_write(mem, buffer, buffer_length);
if (write_length != buffer_length) //*
return -1;
int flush_result = BIO_flush(mem);
if (flush_result != 1)
return -1;
unsigned char *result; //**
int result_length = BIO_get_mem_data(mem, &result);
//use the base64-encoded result to do whatever I need to do
BIO_free_all(mem);
return 0;
目前看来,这似乎是有效的。但是,这是好的和健壮的代码吗?我对上面用星号标记的代码片段有特别的问题:
- (
//*
) 是否正确地假设BIO_write()
总是一次性写出整个 base64 编码字符串,还是我必须在这里创建一个循环? - (
//**
) 使用类型unsigned char*
是正确的,还是必须使用char *
?