C++ 对图像数据进行base64编码

引用openssl头文件:

#include <openssl/bio.h>
#include <openssl/evp.h>
#include <openssl/buffer.h>

unsigned char* ----> string:

string base64_encode(const unsigned char* buffer, unsigned int length)
{
	BIO* b64 = NULL;
	BIO* bmem = NULL;
	BUF_MEM* bptr;

	b64 = BIO_new(BIO_f_base64());
	bmem = BIO_new(BIO_s_mem());
	b64 = BIO_push(b64, bmem);
	BIO_write(b64, buffer, length);
	BIO_flush(b64);
	BIO_get_mem_ptr(b64, &bptr);

	char* buffer_out = (char*)malloc(bptr->length + 1);
	memcpy(buffer_out, bptr->data, bptr->length);
	buffer_out[bptr->length] = 0;

	BIO_free_all(b64);

	string base64_string(buffer_out);
	free(buffer_out);

	return base64_string;
}

vector<unsigned char> ----> string

string base64_encode(const vector<unsigned char>&data)
{
	BIO* bio;
	BIO* b64;
	BUF_MEM* bufferPtr;

	b64 = BIO_new(BIO_f_base64());
	bio = BIO_new(BIO_s_mem());
	bio = BIO_push(b64, bio);

	BIO_set_flags(bio, BIO_FLAGS_BASE64_NO_NL);
	BIO_write(bio, data.data(), data.size());
	BIO_flush(bio);
	BIO_get_mem_ptr(bio, &bufferPtr);
	BIO_set_close(bio, BIO_NOCLOSE);
	BIO_free_all(bio);

	return string(bufferPtr->data, bufferPtr->length);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值