C++常用的函数和类的积累

449 阅读1分钟

获取一块内存,可指定大小的内存,交由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);
}

stringwstring的相互转换

#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;