C++常用类型转换(在Unicode和MBCS之间相互转换函数)

简介: C++常用类型转换(在Unicode和MBCS之间相互转换函数)

1、C++在Unicode和MBCS之间相互转换函数

BOOL MByteToWChar(LPCSTR lpcszStr, LPWSTR lpwszStr, DWORD dwSize)
{
        DWORD dwMinSize;
        dwMinSize = MultiByteToWideChar(CP_ACP, 0, lpcszStr, -1, NULL, 0);
        if (dwSize < dwMinSize)
        {
                return FALSE;
        }
        MultiByteToWideChar(CP_ACP, 0, lpcszStr, -1, lpwszStr, dwMinSize);
        return TRUE;
}
BOOL WCharToMByte(LPCWSTR lpcwszStr, LPSTR lpszStr, DWORD dwSize)
{
        DWORD dwMinSize;
        dwMinSize = WideCharToMultiByte(CP_OEMCP, NULL, lpcwszStr, -1, NULL, 0, NULL, FALSE);
        if (dwSize < dwMinSize)
        {
                return FALSE;
        }
        WideCharToMultiByte(CP_OEMCP, NULL, lpcwszStr, -1, lpszStr, dwSize, NULL, FALSE);
        return TRUE;
}


使用方法:

wchar_t wText[255] = {L"你好"};

char sText[255]= {0};

WCharToMByte(wText,sText,sizeof(sText)/sizeof(sText[0]));//宽字节转多字节

MByteToWChar(sText,wText,sizeof(wText)/sizeof(wText[0]));//多字节转宽字节


2、std:string的格式化


#ifndef NOT_SAVE_IMAGE
  std::string name;
  std::stringstream ss1;
  ss1.str("");
  ss1 << "imageSrc";
  ss1 << index;
  ss1 << ".jpg";
  name = ss1.str();
  _saveImageMat(name, imageSrc);
  ss1.str("");
  ss1 << "imageDst";
  ss1 << index;
  ss1 << ".jpg";
  name = ss1.str();
  _saveImageMat(name, imageDst);
#endif
void CGPUTest::_saveImageMat(std::string path, const cv::Mat& img)
{
  //根据扩展名来决定储存jpg还是bmp
  if (path.find("jpg") != path.npos)//找到了jpg,一个特别的标志c++中用npos表示
  {
  vector<int> compression_params;
  compression_params.push_back(cv::IMWRITE_JPEG_QUALITY);//选择jpeg
  compression_params.push_back(100);//在这个填入你要的图片质量,默认值是95,100代表满分
  cv::imwrite(path, img, compression_params);//根据路径,保存为jpg格式
  }
  else
  {
  cv::imwrite(path, img);//根据路径,保存为bmpg格式
  }
}


相关文章
|
2月前
|
存储 编译器 C++
【c++】类和对象(下)(取地址运算符重载、深究构造函数、类型转换、static修饰成员、友元、内部类、匿名对象)
本文介绍了C++中类和对象的高级特性,包括取地址运算符重载、构造函数的初始化列表、类型转换、static修饰成员、友元、内部类及匿名对象等内容。文章详细解释了每个概念的使用方法和注意事项,帮助读者深入了解C++面向对象编程的核心机制。
120 5
|
3月前
|
程序员 C++ 容器
在 C++中,realloc 函数返回 NULL 时,需要手动释放原来的内存吗?
在 C++ 中,当 realloc 函数返回 NULL 时,表示内存重新分配失败,但原内存块仍然有效,因此需要手动释放原来的内存,以避免内存泄漏。
|
3月前
|
存储 前端开发 C++
C++ 多线程之带返回值的线程处理函数
这篇文章介绍了在C++中使用`async`函数、`packaged_task`和`promise`三种方法来创建带返回值的线程处理函数。
110 6
|
3月前
|
C++
C++ 多线程之线程管理函数
这篇文章介绍了C++中多线程编程的几个关键函数,包括获取线程ID的`get_id()`,延时函数`sleep_for()`,线程让步函数`yield()`,以及阻塞线程直到指定时间的`sleep_until()`。
51 0
|
3月前
|
编译器 C语言 C++
C++入门3——类与对象2-2(类的6个默认成员函数)
C++入门3——类与对象2-2(类的6个默认成员函数)
41 3
|
3月前
|
编译器 C语言 C++
详解C/C++动态内存函数(malloc、free、calloc、realloc)
详解C/C++动态内存函数(malloc、free、calloc、realloc)
517 1
|
3月前
|
编译器 C语言 C++
C++入门4——类与对象3-1(构造函数的类型转换和友元详解)
C++入门4——类与对象3-1(构造函数的类型转换和友元详解)
35 1
|
3月前
|
存储 编译器 C++
C++入门3——类与对象2-1(类的6个默认成员函数)
C++入门3——类与对象2-1(类的6个默认成员函数)
56 1
|
3月前
|
存储 编译器 数据安全/隐私保护
【C++篇】C++类与对象深度解析(四):初始化列表、类型转换与static成员详解2
【C++篇】C++类与对象深度解析(四):初始化列表、类型转换与static成员详解
49 3
|
3月前
|
编译器 C++
【C++篇】C++类与对象深度解析(四):初始化列表、类型转换与static成员详解1
【C++篇】C++类与对象深度解析(四):初始化列表、类型转换与static成员详解
60 3