您的位置:首页 > 编程语言 > C语言/C++

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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: