几个实用的C++函数接口

简介: 几个实用的C++函数接口
#include <codecvt>
#include <boost/filesystem.hpp>
#include <boost/filesystem/path.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
std::string time_to_string(const boost::posix_time::ptime& time)
{
  boost::posix_time::time_facet* facet = new boost::posix_time::time_facet();
  facet->format("%Y_%m_%d %H_%M_%S");
  std::stringstream stream;
  stream.imbue(std::locale(std::locale::classic(), facet));
  stream << time;
  return stream.str();
}
boost::filesystem::path executable_path()
{
  TCHAR path[MAX_PATH] = { 0 };
  GetModuleFileName(GetModuleHandle(NULL), path, MAX_PATH);
  return boost::filesystem::path(path).remove_filename();
}
std::string convertToUtf8(const std::wstring& str) {
  std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>, wchar_t> converter;
  return converter.to_bytes(str);
}
std::wstring convertToUtf16(const std::string& str) {
  std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>, wchar_t> converter;
  return converter.from_bytes(str);
}
bool isNum(std::string strInfo)
{
  try
  {
    unsigned long data = boost::lexical_cast<UINT64>(strInfo);
  }
  catch (boost::exception& e)
  {
    return false;
  }
  return true;
}
std::string GetUUID()
{
  boost::uuids::uuid uuid = boost::uuids::random_generator()();
  return boost::uuids::to_string(uuid);
}
UINT64 GetCurTime()
{
  return std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count();
}
std::string GetLocalFormatTime()
{
  char buf[512] = { 0 };
  using namespace std::chrono;
  const time_t& curTime = system_clock::to_time_t(system_clock::now());
  tm* localTime = localtime(&curTime);
  sprintf_s(buf, "%d-%d-%d %d:%d:%d", localTime->tm_year + 1900, localTime->tm_mon + 1,
    localTime->tm_mday, localTime->tm_hour, localTime->tm_min, localTime->tm_sec);
  return buf;
}
std::wstring Utf8ToUnicode(const std::string& utf8)
{
  LPCCH ptr = utf8.c_str();
  int size = MultiByteToWideChar(CP_UTF8, 0, ptr, -1, NULL, NULL);
  std::wstring wstrRet(size, 0);
  int len = MultiByteToWideChar(CP_UTF8, 0, ptr, -1, (LPWSTR)wstrRet.c_str(), size);
  return wstrRet;
}
std::string Utf8ToAnsi(const std::string& utf8)
{
  std::wstring wstrTemp = Utf8ToUnicode(utf8);
  LPCWCH ptr = wstrTemp.c_str();
  int size = WideCharToMultiByte(CP_ACP, 0, ptr, -1, NULL, 0, NULL, NULL);
  std::string strRet(size-1, 0);
  int len = WideCharToMultiByte(CP_ACP, 0, ptr, -1, (LPSTR)strRet.c_str(), size, NULL, NULL);
  return strRet;
}
void log(const std::string& str) 
{
  std::ofstream file((executable_path() / "error.log").c_str(), std::ios::app);
  file << time_to_string(boost::posix_time::second_clock::universal_time()) << ' ' << str << std::endl;
}
std::string ws2s(const std::wstring& str)
{
  int tm1 = GetCurTime();
  char*     pElementText;
  int    iTextLen;
  // wide char to multi char
  iTextLen = WideCharToMultiByte(CP_ACP, 0, str.c_str(), -1, NULL, 0, NULL, NULL);
  pElementText = new char[iTextLen + 1];
  memset((void*)pElementText, 0, sizeof(char)* (iTextLen + 1));
  ::WideCharToMultiByte(CP_ACP, 0, str.c_str(), -1, pElementText, iTextLen, NULL, NULL);
  std::string strText;
  strText = pElementText;
  delete[] pElementText;
  int tm2 = GetCurTime() - tm1;
  return strText;
}
相关文章
|
18天前
|
程序员 C++ 容器
在 C++中,realloc 函数返回 NULL 时,需要手动释放原来的内存吗?
在 C++ 中,当 realloc 函数返回 NULL 时,表示内存重新分配失败,但原内存块仍然有效,因此需要手动释放原来的内存,以避免内存泄漏。
|
29天前
|
存储 前端开发 C++
C++ 多线程之带返回值的线程处理函数
这篇文章介绍了在C++中使用`async`函数、`packaged_task`和`promise`三种方法来创建带返回值的线程处理函数。
43 6
|
29天前
|
C++
C++ 多线程之线程管理函数
这篇文章介绍了C++中多线程编程的几个关键函数,包括获取线程ID的`get_id()`,延时函数`sleep_for()`,线程让步函数`yield()`,以及阻塞线程直到指定时间的`sleep_until()`。
21 0
C++ 多线程之线程管理函数
|
1月前
|
编译器 C语言 C++
C++入门3——类与对象2-2(类的6个默认成员函数)
C++入门3——类与对象2-2(类的6个默认成员函数)
23 3
|
1月前
|
C++
【C++】实现日期类相关接口(三)
【C++】实现日期类相关接口
|
1月前
|
编译器 C语言 C++
详解C/C++动态内存函数(malloc、free、calloc、realloc)
详解C/C++动态内存函数(malloc、free、calloc、realloc)
125 1
|
1月前
|
存储 编译器 C++
C++入门3——类与对象2-1(类的6个默认成员函数)
C++入门3——类与对象2-1(类的6个默认成员函数)
25 1
|
1月前
|
编译器 C语言 C++
C++入门6——模板(泛型编程、函数模板、类模板)
C++入门6——模板(泛型编程、函数模板、类模板)
37 0
C++入门6——模板(泛型编程、函数模板、类模板)
|
1月前
|
C++
【C++】实现日期类相关接口(二)
【C++】实现日期类相关接口
|
1月前
|
C++
【C++】实现日期类相关接口(一)
【C++】实现日期类相关接口