ワイド文字列扱い

//ワイド文字列コピー
WCHAR oomoto = L"大元";
WCHAR aite = [20];
wcscpy( aite, oomoto );
//______________________________________

//ワイド文字列 定義後の代入
WCHAR* hensu = new WCHAR[100];
wcsncpy_s( hensu, 100, L"", 0 );
// hensu = ""
//______________________________________

//ワイド文字列 長さ
WCHAR* SrcData;
i = wcslen( SrcData );
//______________________________________

//ワイド文字列への末尾追加(連結)
WCHAR* oomoto = new WCHAR[100];
WCHAR* tsuika = new WCHAR[2];
wcscat( oomoto, tsuika );
// oomoto = oomoto & tsuika
//______________________________________

//ワイド文字列内検索(INSTR)
WCHAR* oomoto = L"あいうえお";
int index;

//先頭から検索
WCHAR ch = L‘う’;
WCHAR* p = wcschr(oomoto, ch);
index = p – oomoto;
//indexには先頭をゼロとして、2が入る
//pには「うえお」が入る

//末尾から検索
WCHAR* p = wcsrchr(oomoto, L‘え’);
index = p – oomoto;
//indexには先頭をゼロとして、3が入る
//pには「えお」が入る
//______________________________________

//マルチバイト文字列からワイド文字列へのコピー
char oomoto[] = "あいうえお";
WCHAR* aite = new WCHAR[20];
//まずは長さ調査
lens = mbstowcs( NULL, oomoto, 0 );
//長さ分をコピー
lens = mbstowcs( aite, oomoto, lens + 1 );

基本

//WinMainでの引数(argc,argv)
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInst, LPSTR lpszCmdLine, int nCmdShow) {
for(i=1; i < __argc; i++)
printf(“%s\n", __argv[i]);
}
//______________________________________

//ロケーション設定
setlocale(LC_ALL, “Japanese_Japan.932");

Char,Unicode,ワイド文字

ASCII文字コード:
ー0x00-0x7fまでの128文字(7ビット)

シングルバイト文字セット(SBCS):
-8ビット(1バイト)、ASCII文字

ダブルバイト文字セット(DBCS):
-16ビット(2バイト)
-C言語ではシングルバイト文字もダブルバイト文字もchar型の配列

マルチバイト文字セット(MBCS):
-MSDNの定義では1or2バイト文字
-上記シングル、ダブルは、ここに含まれる
-Shift-JISはここに属する

ワイド文字セット:
-常に16ビット(2バイト)
ーワイド文字はchar型では無い
ーワイド文字はwchar_t型(Unicode)
______________________________________

リテラル文字

シングルバイト文字セット
const char* str = “TEST”;
ダブルクォーテーションで囲まれた文字列を「リテラル文字」と呼ぶ

マルチバイト文字セット
const char* str = “日本語”;

ワイド文字セット
const wchar_t* str = L”先頭にLが必須”;
______________________________________

マルチバイト文字でもUnicodeでも、コードを変えずに使用する方法:
const _TCHAR* str = _T(“これなら自動”);
ーMicrosoft固有の仕様
ーマルチバイト文字、ワイド文字(Unicode)どちらでもOk
ー仕組み:Unicodeの場合_TCHARをwchar_t型に、Unicode以外はChar型にコンパイル時に置換
______________________________________

文字列変換:

マルチバイト文字 → ワイド文字(Unicode)
MultiByteToWideChar関数(Windows API関数)
mbstowcs関数(Cランタイムライブラリ)

ワイド文字(Unicode) → マルチバイト文字
WideCharToMultiByte関数(Windows API関数)
wctomb関数(Cランタイムライブラリ)