C++多字节字符与宽字节字符相互转换
2015-01-04 14:07
323 查看
#pragma once
class StrTransfer
{
StrTransfer();
virtual ~ StrTransfer();
char * TCHAR2char(wchar_t* wc);//宽字节转单字节;
wchar_t* char2THCAR(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*/
////////////////////////////////////////////////////////////////////////////////////
#include "StdAfx.h"
#include "StrTransfer.h"
StrTransfer::StrTransfer()
:m_char(NULL)
,m_wchar(NULL)
{
}
StrTransfer::~StrTransfer()
{
Release();
}
char * StrTransfer::TCHAR2char(TCHAR * tchstr)
{
if(tchstr == 0)
return 0;
Release();
int len= WideCharToMultiByte(CP_ACP, 0, tchstr, -1, 0, 0, 0, 0);
m_char=new char[len+1];
WideCharToMultiByte(CP_ACP,0,tchstr,-1,m_char,len,NULL,NULL);
m_char[len]='\0';
return m_char;
}
TCHAR * StrTransfer::char2THCAR(char * str)
{
if(str == 0)
return 0;
Release();
int len = MultiByteToWideChar(CP_ACP,0,str,-1,NULL,0);
m_wchar=new wchar_t[len+1];
MultiByteToWideChar(CP_ACP,0,str,-1,m_wchar,len);
m_wchar[len]='\0';
return m_wchar;
}
void StrTransfer::Release()
{
if(m_char)
{
delete m_char;
m_char=NULL;
}
if(m_wchar)
{
delete m_wchar;
m_wchar=NULL;
}
}
使用的时候非常简单了:省去了释放资源的麻烦 ;使用时注意每次转换上原来的空间已被删除不能再利用,小心野的出现指针.
尤其像sprintf,CString::Format格式化多个字符串是每一个需要个转换的字符串都需定义一个对象去处理
复制代码 代码如下:
WCHAR* wc=findData.cFileName;
StrTransfer u;
char* c=u.WcharToChar(wc);
cout<<c<<endl;
CUser u;
char* pBuffer=u.WcharToChar(szFullPath);
cout<<totalNum<<" "<<pBuffer<<endl;
class StrTransfer
{
StrTransfer();
virtual ~ StrTransfer();
char * TCHAR2char(wchar_t* wc);//宽字节转单字节;
wchar_t* char2THCAR(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*/
////////////////////////////////////////////////////////////////////////////////////
#include "StdAfx.h"
#include "StrTransfer.h"
StrTransfer::StrTransfer()
:m_char(NULL)
,m_wchar(NULL)
{
}
StrTransfer::~StrTransfer()
{
Release();
}
char * StrTransfer::TCHAR2char(TCHAR * tchstr)
{
if(tchstr == 0)
return 0;
Release();
int len= WideCharToMultiByte(CP_ACP, 0, tchstr, -1, 0, 0, 0, 0);
m_char=new char[len+1];
WideCharToMultiByte(CP_ACP,0,tchstr,-1,m_char,len,NULL,NULL);
m_char[len]='\0';
return m_char;
}
TCHAR * StrTransfer::char2THCAR(char * str)
{
if(str == 0)
return 0;
Release();
int len = MultiByteToWideChar(CP_ACP,0,str,-1,NULL,0);
m_wchar=new wchar_t[len+1];
MultiByteToWideChar(CP_ACP,0,str,-1,m_wchar,len);
m_wchar[len]='\0';
return m_wchar;
}
void StrTransfer::Release()
{
if(m_char)
{
delete m_char;
m_char=NULL;
}
if(m_wchar)
{
delete m_wchar;
m_wchar=NULL;
}
}
使用的时候非常简单了:省去了释放资源的麻烦 ;使用时注意每次转换上原来的空间已被删除不能再利用,小心野的出现指针.
尤其像sprintf,CString::Format格式化多个字符串是每一个需要个转换的字符串都需定义一个对象去处理
复制代码 代码如下:
WCHAR* wc=findData.cFileName;
StrTransfer u;
char* c=u.WcharToChar(wc);
cout<<c<<endl;
CUser u;
char* pBuffer=u.WcharToChar(szFullPath);
cout<<totalNum<<" "<<pBuffer<<endl;
相关文章推荐
- C++ 整数与字节相互转换(X86)
- C++多字节字符转换为宽字符的两种方法
- c++宽字符和多字节字符相互转化类
- ASCII、十六进制、字节数组、字符数组相互转换
- C++中宽字符和窄字符的相互转换
- C#字符、字节相互转换
- c++宽字符与多字节之间转换char—wchar,wchar-char
- C++宽字符与普通字符的相互转换方法
- c#中字符和字节相互转换
- 多字节与宽字符相互转换
- unicode字符和多字节字符的相互转换接口
- unicode字符和多字节字符的相互转换接口
- C++中字符数组与string的相互转换
- C++中字符数组与string的相互转换
- C++中多字节与双字节的字符的转换
- c++ 字符类型总结和相互转换
- VC++ 多字节宽字符相互转换
- 我搜集的C++字符类型的相互转换
- C++中字符数组与string的相互转换