|
VisualC
Visual C のメモ †
primitive 型 †
char | -128 〜 127 | 1byte(java は 2) | unsigned char | 0 〜 255 | 1byte | short | -32768 - 32767 | 2byte | unsigned short | 0 〜 65535 | 2byte | wchar_t | 〃 | 2byte | int | -2147483648-2147483647 | 4byte | long | | 4byte | long long | | 8byte | __int64 | | 8byte | double | | 8byte |
ラッパ †
DWORD | unsigned long | 8byte | LONGLONG | __int64 | 8byte |
文字列 †
W系 (ワイド文字) = UNICODE †
- 主に新しい処理系ではこちらが使われる
- 1文字に必ず2バイト使う( 半角の 'A' でも 2byte )
- 2byte なので基本型はshort
型 | 実体 | 構文 | 書き換え | wchar_t* | unsigned short* | wchar_t* str = L"A漢字"; | 可 | WCHAR* | unsigned short* | WCHAR* = L"A漢字"; | 可 | LPWSTR | unsigned short* | LPWSTR = L"A漢字"; | 可 | LPCWSTR | const unsigned short* | LPCWSTR = L"A漢字"; | 不可 |
※ Lマクロは明示的に Unicode にしてしまうが、後述の T マクロでも適切に代入はされる
A系 (マルチバイト文字) SJIS等 †
- 主に古い処理系ではこちらが使われる
- 半角は 1バイト 全角は 2バイトを使って表す
- 1byte なので 基本型は char
型 | 実体 | 構文 | 書き換え | char* | char* | char* str = "A漢字"; | 可 | const char* | const char* | const char * str = "A漢字"; | 不可 | LPSTR | char* | LPSTR str = "A漢字"; | 可 | LPCSTR | const char* | LPCSTR str = "A漢字"; | 不可 |
汎用型 TCHAR †
- W系とA系でプログラムが異なると汎用性がないため、defineで両方使えるようにする仕組み
- UNICODE が宣言されていたら wchar_t(2byte)に、それ以外ならchar(1byte)になる
TCHAR | char / wchar_t | | CString | TCHAR* | const char からも作れる | LPTSTR | TCHAR* | | LPCTSTR | const TCHAR* | |
マクロ †
- W系とA系のコードの互換のためにさまざまな変換関数やマクロがある
L"ほげABCほげ" | wchar_t* | 半角 A 等も2バイトを使う文字になる | TEXT(), _T | TCHAR* | TCHAR型に変換 (処理系によってchar/wchar_t が変わる) |
変換 †
Unicode -> MBCS(MultiByte) †
- WideCharToMultiByte
- CAtlString
MBCS(MultiByte) -> Unicode †
|
|