C++多字节字符与宽字节字符相互转换

 更新时间:2012年11月23日 15:12:52   作者:  
最近在C++编程中经常遇到需要多字节字符与宽字节字符相互转换的问题,自己写了一个类来封装wchar_t与char类型间的转换
最近在C++编程中经常遇到需要多字节字符与宽字节字符相互转换的问题,一直自己贴那几句代码。觉得麻烦,于是就自己写了一个类来封装wchar_t与char类型间的转换,其他的,诸如:CString\ LPWSTR\TCHAR CHAR\LPSTR之间也是一样用
复制代码 代码如下:

#include <iostream>
using namespace std;
class CUser
{
public:
CUser();
virtual~ CUser();
char* WcharToChar(wchar_t* wc);//宽字节转单字节
wchar_t* CharToWchar(char* c); //单字节转宽字节
void Release();//释放资源
private:
char* m_char;
wchar_t* m_wchar;
};
/////////////////////////////////////////////////////////////////////////////////////
/*字符类型 wchar_t char
/*获取字符长度 wcslen() strlen()
/*连接两个字符串 wcscat() strcpy()
/*复制字符串 wcscpy() strcpy()
/*比较两个字符串 wcscmp() strcmp()
/*具体参数详见www.linuxidc.com*/
////////////////////////////////////////////////////////////////////////////////////
CUser::CUser()
:m_char(NULL)
,m_wchar(NULL)
{
}
CUser::~CUser()
{
Release();
}
char* CUser::WcharToChar(wchar_t* wc)
{
Release();
int len= WideCharToMultiByte(CP_ACP,0,wc,wcslen(wc),NULL,0,NULL,NULL);
m_char=new char[len+1];
WideCharToMultiByte(CP_ACP,0,wc,wcslen(wc),m_char,len,NULL,NULL);
m_char[len]='\0';
return m_char;
}
wchar_t* CUser::CharToWchar(char* c)
{
Release();
int len = MultiByteToWideChar(CP_ACP,0,c,strlen(c),NULL,0);
m_wchar=new wchar_t[len+1];
MultiByteToWideChar(CP_ACP,0,c,strlen(c),m_wchar,len);
m_wchar[len]='\0';
return m_wchar;
}
void CUser::Release()
{
if(m_char)
{
delete m_char;
m_char=NULL;
}
if(m_wchar)
{
delete m_wchar;
m_wchar=NULL;
}
}

使用的时候非常简单了:
复制代码 代码如下:

WCHAR* wc=findData.cFileName;
CUser u;
char* c=u.WcharToChar(wc);
cout<<c<<endl;
CUser u;
char* pBuffer=u.WcharToChar(szFullPath);
cout<<totalNum<<" "<<pBuffer<<endl;

相关文章

  • C语言进阶:指针的进阶(5)

    C语言进阶:指针的进阶(5)

    这篇文章主要介绍了C语言指针详解及用法示例,介绍了其相关概念,然后分享了几种用法,具有一定参考价值。需要的朋友可以了解下
    2021-09-09
  • 利用Debug调试代码解决0xC0000005: 读取位置 0x0000000000000000 时发生访问冲突问题

    利用Debug调试代码解决0xC0000005: 读取位置 0x0000000000000000 时发生访问冲突问

    这篇文章主要介绍了利用Debug调试代码解决0xC0000005: 读取位置 0x0000000000000000 时发生访问冲突,本文给大家分享完美解决方案,需要的朋友可以参考下
    2023-03-03
  • C语言深入回顾讲解结构体对齐

    C语言深入回顾讲解结构体对齐

    C 数组允许定义可存储相同类型数据项的变量,结构是 C 编程中另一种用户自定义的可用的数据类型,它允许你存储不同类型的数据项,本篇让我们来了解C 的结构体内存对齐
    2022-06-06
  • C++数据结构之AVL树的实现

    C++数据结构之AVL树的实现

    AVL树是高度平衡的而二叉树,它的特点是AVL树中任何节点的两个子树的高度最大差别为1,本文主要给大家介绍了C++如何实现AVL树,需要的朋友可以参考下
    2022-06-06
  • C/C++后端学习与练习深入

    C/C++后端学习与练习深入

    这篇文章主要介绍了C/C++对于后端的学习与练习,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • C语言的程序环境与预处理你真的了解吗

    C语言的程序环境与预处理你真的了解吗

    这篇文章主要为大家详细介绍了C语言的程序环境与预处理,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • c++中为什么不提倡使用vector示例详解

    c++中为什么不提倡使用vector示例详解

    这篇文章主要给大家介绍了关于c++中为什么不提倡使用vector的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用c++具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-08-08
  • 动态数组C++实现方法(分享)

    动态数组C++实现方法(分享)

    下面小编就为大家带来一篇动态数组C++实现方法(分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • 简单介绍C++编程中派生类的析构函数

    简单介绍C++编程中派生类的析构函数

    这篇文章主要介绍了C++编程中派生类的析构函数,析构函数平时一般使用较少,需要的朋友可以参考下
    2015-09-09
  • 求子数组最大和的实例代码

    求子数组最大和的实例代码

    求子数组最大和的实例代码,需要的朋友可以参考一下
    2013-03-03

最新评论