У меня есть этот буфер:
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 *
?