获取一块内存,可指定大小的内存,交由std::shared_ptr保管
std::shared_ptr<uint8_t> createCamBuf(uint64_t buf_size)
{
// 推荐
std::shared_ptr<uint8_t[]> sp_buf(new uint8_t[buf_size]);
// 显式地声明自定义删除器
// std::shared_ptr<uint8_t> sp_buf(new uint8_t[buf_size], [](uint8_t* p_buf) {delete[] p_buf; });
return sp_buf;
}
其实,内存可以由string来承接
示例
std::string str_data;
const uint64_t size = 1024 * 1024 * 3;
str_data.reserve(size);
// 使用,拿到内存地址即可操作它
char* p_data = const_cast<char*>(str_data.c_str());
对string承接的内存进行操作,追加数据
void sendBufToRedis(sw::redis::Redis & redis, uint8_t * p_buf, uint64_t buf_size)
{
// prepare data
std::string str_data;
str_data.reserve(buf_size);
str_data.append((char*)p_buf, buf_size);
// set
redis.set("img", str_data);
}
string与 wstring的相互转换
#include <string>
#include <locale>
#include <codecvt>
// convert string to wstring
inline std::wstring to_wide_string(const std::string& input)
{
std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
return converter.from_bytes(input);
}
// convert wstring to string
inline std::string to_byte_string(const std::wstring& input)
{
//std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;
std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
return converter.to_bytes(input);
}
C++11 获取线程号
std::thread::id id = std::this_thread::get_id();
std::cout << "id: " << id << std::endl;
std::stringstream ss;
std::string str_id;
uint64_t threadid;
ss << id;
ss >> str_id;
threadid = std::stoll(str_id);
std::cout << "threadid: " << threadid << std::endl;