MFC/WTL文字列変換(CString-char)
CString:
VS符号化環境がUnicodeの場合、CStringはCStringWである.VS符号化環境がマルチバイトの場合、CStringはCStringAである.
C/C++には、charとwchar_の2つの環境の文字列が同様に存在します.t.
本文の目的は:彼らを転換することです.
Code Start :
Unicodeとマルチバイト間の変換はWIN APIによって行われる.
UnicodeとUnicodeの間、およびマルチバイトとマルチバイトの間は、文字コピーによって完了します.
使用方法:
CStringW cs=L「中国語English」
UStrToAscChar us(cs);
printf_s("%s ",&us);//コンソール出力文字列MFCプログラムでコンソールを開く方法について:
変数を1つ追加すればいい:Console sole;
VS符号化環境がUnicodeの場合、CStringはCStringWである.VS符号化環境がマルチバイトの場合、CStringはCStringAである.
C/C++には、charとwchar_の2つの環境の文字列が同様に存在します.t.
本文の目的は:彼らを転換することです.
Code Start :
class UStrToAscChar //CStringW + wchar_t* -> char*
{
public:
UStrToAscChar(const CStringW cs)
{
int n = WideCharToMultiByte(CP_ACP,0,cs,-1,NULL,0,NULL,NULL);
if(n <= 0)
buff = NULL;
buff = new char[n];
memset(buff,0,n);
WideCharToMultiByte(CP_ACP,0,cs,-1,buff,n,NULL,NULL);
}
~UStrToAscChar()
{
delete buff;
}
const char* operator &() // ,
{
return buff;
}
private:
char* buff;
};
class UStrToWChar //CStringW ->wchar_t*
{
public:
UStrToWChar(const CStringW cs)
{
int n = cs.GetLength();
if(n <= 0)
buff = NULL;
buff = new wchar_t[n + 1];
wmemset(buff,0,n + 1);
for(int i = 0; i < n; i++)
buff[i] = cs[i];
}
~UStrToWChar()
{
delete buff;
}
const wchar_t* operator &()
{
return buff;
}
private:
wchar_t* buff;
};
class AStrToAscChar //CStringA -> char*
{
public:
AStrToAscChar(const CStringA cs)
{
int n = cs.GetLength();
if(n <= 0)
buff = NULL;
buff = new char[n + 1];
memset(buff,0,n + 1);
for(int i = 0; i < n; i++)
buff[i] = cs[i];
}
~AStrToAscChar()
{
delete buff;
}
const char* operator &()
{
return buff;
}
private:
char* buff;
};
class AscCharToWChar //char* -> wchar_t*
{
public:
AscCharToWChar(const char* ac)
{
if(ac == NULL || strlen(ac) <= 0)
buff = NULL;
int n = MultiByteToWideChar(CP_ACP,0,ac,-1,NULL,0);
buff = new wchar_t[n];
wmemset(buff,0,n);
MultiByteToWideChar(CP_ACP,0,ac,-1,buff,n);
}
~AscCharToWChar()
{
delete buff;
}
const wchar_t* operator &()
{
return buff;
}
private:
wchar_t* buff;
};
Unicodeとマルチバイト間の変換はWIN APIによって行われる.
UnicodeとUnicodeの間、およびマルチバイトとマルチバイトの間は、文字コピーによって完了します.
使用方法:
CStringW cs=L「中国語English」
UStrToAscChar us(cs);
printf_s("%s ",&us);//コンソール出力文字列MFCプログラムでコンソールを開く方法について:
class Console
{
public:
Console()
{
AllocConsole();
freopen_s(&fp,"conout$","w",stdout); //
setlocale(LC_ALL,"chs");
}
private:
FILE *fp;
};
変数を1つ追加すればいい:Console sole;