- データ型名・型変換・対照表 -
| 型名 | ビット幅 | バイト長 | VB.NET | VB6.0 | CLR仕様 | 末尾文字 | C/C++/Win32型 | 値範囲 |
|---|---|---|---|---|---|---|---|---|
| 符号付バイト型 | 8 | 1 | SByte | (Byte) | SByte | char,CHAR,TCHAR | -128 〜127 | |
| バイト型 | 8 | 1 | Byte | Byte | Byte | unsigned char,BYTE | 0〜255 | |
| 文字型 | 16 | 2 | Char | Char | C | WCHAR | 0〜65535 | |
| 短整数型 | 16 | 2 | Short | Integer | Int16 | S | short , SHORT , ATOM | -32,768 〜 32,767 |
| 短整数型(符号なし) | 16 | 2 | UShort |
※1 |
UInt16 | US | unsigned short, WORD , LANGID | 0 〜 65,535 |
| 整数型 | 32 | 4 | Integer | Long | Int32 | Iまたは% | int※2 , long , INT , LONG , LCID | -2,147,483,648 〜 2,147,483,647 |
| 整数型(符号なし) | 32 | 4 | UInteger |
※1 |
UInt32 | UI | unsigned long , UNIT , DWORD , ULONG | 0 〜 4,294,967,295 |
| 単精度浮動小数点型 | 32 | 4 | Single | Single | Single | Fまたは! | float | 〔負〕 -3.402823E38 〜 -1.401298E-45 〔正〕 1.401298E-45 〜 3.402823E38 |
| 長整数型 | 64 | 8 | Long | Int64 | Lまたは& | LONGLONG | -9,223,372,036,854,775,808〜 9,223,372,036,854,775,807 | |
| 長整数型(符号なし) | 64 | 8 | ULong | UInt64 | UL | ULONGLONG | 0 〜 18,446,744,073,709,551,615 | |
| 倍精度浮動小数点型 | 64 | 8 | Double | Double | Double | Rまたは# | double | 〔負〕 -1.79769313486231570E+308 〜 -4.94065645841246544E-324 〔正〕4.94065645841246544E-324 〜 1.79769313486231570E+308 |
| 通貨型 | 64 | 8 | (Double) | Currency | (Double) | -922,337,203,685,477.5808 〜 922,337,203,685,477.5807 | ||
| 日付型 | 64 | 8 | Date | Date | DateTime | 0001/01/01 00:00:00 〜 9999/12/31 23:59:59 | ||
| 10進数型 | 112 | 14 | Decimal | ※10進数型・VB6.0では直接 型宣言はできず Variantの内部型となる Dim a As Variant a = CDec(1E-28) などとして用いると Variant/Decimal 型となる |
||||
| 10進数型 | 128 | 16 | Decimal | Decimal | Dまたは@ | (小数点なし) 0 〜 +/-79,228,162,514,264,337,593,543,950,335 (小数点以下 28 桁) 0 〜 +/-7.9228162514264337593543950335 (0 以外の絶対小数) +/-0.0000000000000000000000000001 (+/-1E-28) |
||
| 論理型 ※3 | 8・16・32 | 1・2・4 | Boolean | Boolean | Boolean | BOOLEAN(TRUE=1.FALSE=0) 1byte BOOL(TRUE=1.FALSE=0) 4byte |
Trueは 0以外(VBでは-1)となる , False=0 | |
| 文字列型 | 可変長 | 10+文字列長 | String | String | String | VB6.0では0 〜 2GB VB._NETでは 0〜20億個のUnicode文字 |
||
| 文字列型(固定長) | 固定長 | 固定長 | String | String | String | |||
| オブジェクト型 32bit環境 | 32 | 4 | Object | Object | Object | オブジェクトを参照するデータ型・任意の型 | ||
| オブジェクト型 64bit環境 | 64 | 8 | Object | Object | オブジェクトを参照するデータ型・任意の型 | |||
| バリアント型(数値) | 128 | 16 | (Object) | Variant | (Object) | Double型に同じ | ||
| バリアント型 | 176+X | 22+文字長 | (Object) | Variant | (Object) | 可変長文字列型に同じ |
〔注釈〕
・VB.NET/VB6.0/CLR 内に表記の (かっこ) は、代替案です。
※1 VB6.0で Win32のWORDを受ける場合は Integer、 また UINT , DWORD は、 Long 型で受けるのが一般的です。
ただしいずれも Win32の符号なし値を、VB6.0の「符号付き」で受けることになるので、受け取り後に 正反転処理が必要です。
具体的には 受け取った値が マイナス(負)になっている場合。
unsigned short (WORD) の場合は、VB6.0 Integer で受け取り後、それに 2 ^ 16 を加算して、その値を
VB6.0 Long で受ける。
あるいは unsigned long (DWORD)の場合は、VB6.0 Long で受け取り後、2 ^ 32 を加算して、VB6.0 Double で受ける、などとして、正の値にします。
※2 C/C++ の int型は 環境(プラットフォーム)にビット幅が依存します。なお Win32の INT は「32」という文字通り、32bit幅です。
※3 論理型のサイズは、環境(プラットフォーム)に依存します。
これが問題になるのは、Win32のBOOL型・BOOLEAN型を、VB.NET/VB6.0/CLRで受ける場合です。
BOOLEAN型 は、符号付バイト型(1バイト)で受けます。
BOOL型は、整数型・すなわち VB.NET/CLR Integer型、VB6.0 Long 型で受けるのが一般的です。
いずれの場合も、直接 Boolean 型で受けるのは避けるべきです。Win32とVB.NET/VB6.0/CLRの 論理型の共通点は「Falseが0」という点のみです。
したがって、実際にコーディングを行う場合も、「False (0) か、そうでないか」を判断することが一般的となり、True を判断に用いるのは 不安要素となります。
翔泳社さんの「Windows Developer Magazine」に連載していた頃のこと。
連載が はじまった当時は .NET Framework 1.x の頃で、一般には VB6.0 のユーザーさんも多く、解説のために、VB.NET ←→VB6.0 とか、Win32API←→VB.NET の型変換を 同一誌面上で行うことがありました。
が、これ たいへん複雑ですので、書いてるほうも 時に、ワケが分からなくなることがよくありました。
この表は、その対策として 自分用に作ったものです。
連載は通信関係が主体でしたので、主に、型の差異や、取り扱いの微妙な違い、特に Win32 API とのやりとりの解説が、重要な課題でしたので、表もそのようなレイアウトになっています。-
お気づきの点がありましたら、ご意見・ご感想 まで。
(2008/5/17・山崎はるか)