VisualC++ 備忘録 – 文字列の互換性 –


VisualStudio(VC)では文字セットをUNICODEの場合と、マルチバイトの場合では文字型CString、ワイド文字列wchar_t、マルチバイトcharの互換性がとれなかったりします。
そこで、それぞれに文字型の互換性を保つ為に使用するAPIを以下に掲載します。

UNICODEの場合


WideCharToMultiByte() // wchar_t → char変換
MultiByteToWideChar() // char → wchar_t変換

[ 文字列長 ]

// バイト文字列(Char)の場合
strlen() ; // char文字列長
strcpy_s() ; // char文字コピー
sprintf_s() ; // 文字フォーマット
// WideChar(wchar_t)の場合
_tcsrlen(); // 文字列長
_tcscpy() ; // 文字コピー
swprintf_s() ; // 文字フォーマット
// MFC文字列(CString)の場合
GetLength(); // 文字列数
GetAllocLength(); // 文字列長
CString a = CString b ; // そのままコピー

マルチバイトの場合

// String→wchar_t(LPWSTR / LPCWSTR)変換処理
// コール元で開放を行う事
wchar_t* DShowUtil::String2wchar_t(System::String ^str){
wchar_t *ret = (wchar_t *)malloc(str->Length);
int i = 0;
for(i = 0 ; i < str->Length ; i++){
ret[i] = str[i] ;
}
ret[i] = ‘\0’;
return ret ;
}
// String→char変換処理
// コール元で開放を行う事
char* DShowUtil::String2char(System::String ^str){
return(char*)(void*)Marshal::StringToHGlobalAnsi(str) ;
}