|
|||||||||
VisualC の変更点
* Visual C のメモ [#c46e1ffa]
** primitive 型 [#td703abb]
|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|
** ラッパ [#j6741d81]
|DWORD |unsigned long |8byte|
|LONGLONG |__int64 |8byte|
** 文字列 [#x9b3334a]
*** W系 (ワイド文字) = UNICODE [#x218af97]
- 主に新しい処理系ではこちらが使われる
- 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等 [#b9485c14]
- 主に古い処理系ではこちらが使われる
- 半角は 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 [#y51fe96e]
- W系とA系でプログラムが異なると汎用性がないため、defineで両方使えるようにする仕組み
- UNICODE が宣言されていたら wchar_t(2byte)に、それ以外ならchar(1byte)になる
| TCHAR | char / wchar_t | |
| CString | TCHAR* | const char からも作れる|
| LPTSTR | TCHAR* | |
| LPCTSTR | const TCHAR* | |
*** マクロ [#wbb3b911]
- W系とA系のコードの互換のためにさまざまな変換関数やマクロがある
| L"ほげABCほげ"| wchar_t* | 半角 A 等も2バイトを使う文字になる|
| TEXT(), _T | TCHAR* | TCHAR型に変換 (処理系によってchar/wchar_t が変わる)|
** 変換 [#yb3b8046]
*** Unicode -> MBCS(MultiByte) [#e2ded000]
- WideCharToMultiByte
- CAtlString
*** MBCS(MultiByte) -> Unicode [#a9af8505]
|
|||||||||