山崎はるかのメモ
会社情報 | サイトマップ・検索

VB.NET/VB6.0/CLR/C/C++/Win32API 型一覧表

データ型名・型変換・対照表

△メモ一覧にもどる


型名 ビット幅 バイト長 VB.NET VB6.0 CLR仕様 末尾文字 変換関数 C/C++/Win32型 値範囲 (最小値~最大値)
論理型 ※1 8
16
32
1
2
4
Boolean Boolean Boolean   CBool BOOLEAN(TRUE=1.FALSE=0) 1byte
BOOL(TRUE=1.FALSE=0) 4byte
True は 0以外(VBでは-1)
False は 0
符号付バイト型 8 1 SByte (Byte) SByte     char,CHAR,TCHAR -128 ~127
バイト型 8 1 Byte Byte Byte   CByte unsigned char,BYTE 0~255
文字型 16 2 Char   Char C   WCHAR 0~65535
短整数型 16 2 Short Integer Int16 S CInt short , SHORT , ATOM -32,768 ~ 32,767
短整数型(符号なし) 16 2 UShort ※2 UInt16 US   unsigned short, WORD , LANGID 0 ~ 65,535
整数型 32 4 Integer Long Int32 Iまたは% CLng int※3 , long , INT , LONG , LCID -2,147,483,648 ~ 2,147,483,647
整数型(符号なし) 32 4 UInteger ※2 UInt32 UI   unsigned long , UINT , DWORD , ULONG 0 ~ 4,294,967,295
単精度浮動小数点型 32 4 Single Single Single Fまたは! CSng 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または# CDbl double 〔負〕 -1.79769313486231570E+308 ~ -4.94065645841246544E-324
〔正〕4.94065645841246544E-324 ~ 1.79769313486231570E+308
通貨型 64 8 (Double) Currency (Double)   CCur   -922,337,203,685,477.5808 ~ 922,337,203,685,477.5807
日付型 64 8 Date Date DateTime   CDate   0001/01/01 00:00:00 ~  9999/12/31 23:59:59
10進数型 112 14   Decimal     CDec   ※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)
文字列型 可変長 10+文字列長 String String String   CStr   VB6.0では0 ~ 2GB
VB._NETでは 0~20億個のUnicode文字
文字列型(固定長) 固定長 固定長 String String String   CStr    
オブジェクト型
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 論理型のサイズは、環境(プラットフォーム)に依存します。
これが問題になるのは、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 を判断に用いるのは 不安要素となります。

※2 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 で受ける、などとして、正の値にします。

※3 C/C++ の int型は 環境(プラットフォーム)にビット幅が依存します。なお Win32の INT は「32」という文字通り、32bit幅です。


この表について - 意外に型対照表って ないよね

翔泳社さんの「Windows Developer Magazine」に連載していた頃のこと。
連載が はじまった当時は .NET Framework 1.x の頃で、一般には VB6.0 のユーザーさんも多く、解説のために、VB.NET ←→VB6.0 とか、Win32API←→VB.NET の型変換を 同一誌面上で行うことがありました。
が、これ たいへん複雑ですので、書いてるほうも 時に、ワケが分からなくなることがよくありました。

この表は、その対策として 自分用に作ったものです。
連載は通信関係が主体でしたので、主に、型の差異や、取り扱いの微妙な違い、特に Win32 API とのやりとりの解説が、重要な課題でしたので、表もそのようなレイアウトになっています。

-

お気づきの点がありましたら、ご意見・ご感想 まで。

(2008/5/17・山崎はるか)
追記・変換関数:2013/05/17
デザイン修正:2015/01/20
デザイン修正:2017/02/07

記事ランキング