檢查某個位元值:CheckSingleBit 傳回某個位元值的真偽, 1 傳回真 (True), 0 傳回偽 (False)
引數 | 型態 | 說明 |
wFlags | 長整數 | 欲檢查的旗標 |
Check | 長整數 | 欲檢查位元的位置,由右方向左數,值域為 1 ~ 32 |
範例以 2924 為例,其二進位值為 "101101101100"
範例 | 傳回值 | 說明 |
CheckSingleBit(2924,1) | False | 2924 的二進位值第一位 (最右方) 為 0 |
CheckSingleBit(2924,2) | False | 2924 的二進位值第二位為 0 |
CheckSingleBit(2924,3) | True | 2924 的二進位值第三位為 1 |
CheckSingleBit(2924,12) | True | 2924 的二進位值第 12 位 (最左方) 為 1 |
任意基底階梯函數:CValue(SourceValue, Bios, wFlags, Base)
說明:在中央遙測中心所購買的數值高程資料為每 40 公尺一個高程資料,需要發展本函數以求得任意點四周的控制點座標
引數 | 類型 | 說明 |
SourceValue | 必要 | 來源引數 |
Bios | 可省略 | 階梯函數的間距,預設值為 1 |
wFlags | 可省略 | 進位旗標,預設值為 SG_Normal ,分
|
Base | 可省略 | 基底,表對 0 的偏差 |
範例
範例 | 傳回值 | 說明 |
CValue(2.5,4) | 4 | 以 4 為間距,對 2.5 做四捨五入進位至 0 或 4 |
CValue(2.5,4,SG_Lower) | 0 | 以上式為例,做無條件捨去法 |
CValue(2.5,4,,2) | 2 | 如上圖,修正對 0 位移,使進位至 2 或 6 |
CValue(2.5,4,SG_Upper,2) | 6 | 以上式為例,做無條件進位法 |
CValue(2.58,0.1) | 2.6 | 以 0.1 為間距,對 2.5 做四捨五入進位至 2.5 或 2.6 |
CValue(2.5,,SG_Upper) | 3 | 以 1 為間距,對 2.5 做做無條件進位法進位至 3 |
進制互轉:
變數轉16進位:VariantToHex(SourceVariant, BigEndian)
目前僅支援短整數(Integer)、長整數(Long)、單精度變數(Single)、倍精度變數(Double)、貨幣(Currency)、日期(Date)、字串(String)、物件(Object)、錯誤(Error)、布林(Boolean)、十進位值(Decimal)、位元(Byte)、陣列(Array),其他目前無需求,暫不考慮發展!
函數與 VB 的 Hex 主要不同處在於本函數傳回記憶體中的16進位值, VB 的 Hex 會先將浮點數轉成整數後傳回,因此本函數傳回值包含有 0 及浮點數指數部分,範例及差異請參閱下表:
項目 | 短整數 Integer |
長整數 Long |
單精度變數 Single |
倍精度變數 Double |
函數內容 | VariantToHex(1, True) | VariantToHex(1&, True) | VariantToHex(1!, True) | VariantToHex(1#, True) |
傳回值 | 0001 | 00000001 | 3F800000 | 3FF0000000000000 |
函數內容(VB) | Hex(1) | Hex(1&) | Hex(1!) | Hex(1#) |
傳回值 | 1 | 1 | 1 | 1 |
函數內容 | VariantToHex(-1, True) | VariantToHex(-1&, True) | VariantToHex(-1!, True) | VariantToHex(-1#, True) |
傳回值 | FFFF | FFFFFFFF | BF800000 | BFF0000000000000 |
函數內容(VB) | Hex(-1) | Hex(-1&) | Hex(-1!) | Hex(-1#) |
傳回值 | FFFF | FFFFFFFF | FFFFFFFF | FFFFFFFF |
項目 | 貨幣 Currency |
日期 Date |
字串 String |
布林 Boolean |
SourceVariant引數 | -1@ | 2000/6/15 12:00 AM | 培基語言 | True |
BigEndian引數 | True | True | [省略] | True |
VariantToHex傳回值 | FFFFFFFFFFFFD8F0 | 40E1EA8000000000 | F957FA579E8A008A | FFFF |
Hex傳回值 | FFFFFFFF | 8F54 | 錯誤代碼 13 | FFFF |
項目 | 錯誤 Error |
十進位值 Decimal |
SourceVariant引數 | CVErr(1) | CDec(1) |
BigEndian引數 | True | True |
VariantToHex傳回值 | 0001 | 0000000000000001000000000000 |
Hex傳回值 | 錯誤代碼 13 | 1 |
物件(Object) :
Dim tFont As New StdFont
Debug.Print VariantToHex(tFont, True) ' 傳回物件在記憶體位置之 16 進位值陣列 (Array) :
ReDim TestArray(1 To 3)
TestArray(1) = 1 : TestArray(2) = "培基語言" : TestArray(3) = -1#
Debug.Print VariantToHex(TestArray, True)
' 傳回 0001F957FA579E8A008ABFF0000000000000附註:
字串傳回的是 UniCode 的 16 進位值,若需傳回 ASCII 的 16 進位值 (存在檔案中的 16 進位值) ,則改為:
VariantToHex(StrConv("培基語言",vbFromUnicode)) ' 傳回 B0F6B0F2BB79A8A5
由於 Windows 採用 Little Endian ,故預設改依記憶體順序排列,欲輸出類同 Hex 先高位元後低位元者,則需設定 BigEndian 引數為 True
16進位轉變數:HexToVariant(HexString, wFlags, BigEndian),為 VariantToHex 之反函數
目前僅支援位元(Byte)、短整數(Integer)、長整數(Long)、單精度變數(Single)、倍精度變數(Double)、貨幣(Currency)、日期(Date)、字串(String)、錯誤(Error)、布林(Boolean)、十進位值(Decimal)、陣列(Array),其他目前無需求,暫不考慮發展!
引數:
HexString:16進位字串
wFlags:轉換後之型別,目前支援 vbInteger、vbLong、vbSingle、vbDouble、vbCurrency、vbDate、vbString、VbError、vbBoolean、VbDecimal、vbByte、vbArray
範例:以下範例僅列引數 HexToVariant(..., ..., True)
項目 | 位元 Byte |
短整數 Integer |
長整數 Long |
單精度變數 Single |
倍精度變數 Double |
函數內容 | "1",vbByte | "1",vbInteger | "1",vbLong | "1",vbSingle | "1",vbDouble |
傳回值 | 1 | 1 | 1 | 1.401298E-45 | 4.94065645841247E-324 |
項目 | 貨幣 Currency |
日期 Date |
字串 String |
布林 Boolean |
HexString | FFFFFFFFFFFFD8F0 | 40E1EA8000000000 | F957FA579E8A008A | FFFF |
wFlags | vbCurrency | vbDate | vbString | vbBoolean |
BigEndian | True | True | [省略] | True |
VariantToHex傳回值 | -1@ | 2000/6/15 12:00 AM | 培基語言 | True |
項目 | 錯誤 Error |
十進位值 Decimal |
HexString | 1 | 1000000000000 |
wFlags | vbError | vbDecimal |
BigEndian | True | True |
VariantToHex傳回值 | 錯誤 1 | 1 |
附註:
字串引數使用的是 UniCode 的 16 進位值,若需使用 ASCII 的 16 進位值 (存在檔案中的 16 進位值) ,則改為:
StrConv(HexToVariant("B0F6B0F2BB79A8A5",vbString),vbUnicode)
' 傳回 "培基語言"陣列 (Array) :
由於難以指定字串分割處,故不支援轉為陣列字串變數
可在即時運算視窗輸入
tVal=HexToVariant("010203",vbByte+vbArray) : For i=LBound(tVal) to UBound(tVal):? tVal(i) : Next
' 傳回
1
2
3由於 Windows 採用 Little Endian ,故預設改依記憶體順序排列,欲輸出類同 Hex 先高位元後低位元者,則需設定 BigEndian 引數為 True
求取質數:GetPrimeNumber(UpBound) 以陣列方式傳回所有小於(包含) UpBound 的質數,但不包含 1
範例
tVal=GetPrimeNumber(100)
for i=lbound(tVal) to ubound(tVal)
debug.Print tVal(i)
next i
Big Endian 與 Little Endian 互轉:EndianBigToLittle(hEndian)
傳回值:根據引數型態傳回轉換完對應之值
引數型態:目前僅支援短整數(Integer)、長整數(Long)、單精度變數(Single)、倍精度變數(Double),其他目前無需求,暫不考慮發展!
範例:
Debug.Print EndianBigToLittle(170328064&) ' 傳回 9994
補充說明:
不同作業系統所出的二進位檔可能為 Big 或 Little 方式排列,在交換檔案時應考慮到資料轉換,本函數即為此撰寫一 Big, Lttle 互轉函數
big endian byte order
Left-to-right byte ordering of an integer word. This byte-ordering method is used on many UNIX systems including Sun, Hewlett-Packard®, IBM®, and Data General AViiON®.
little endian byte order
Right-to-left byte ordering of an integer word. This byte-ordering method is used on many operating file systems including DEC OSF/1™, DEC OpenVMS™, MS-DOS®, and Windows NT™.
高斯消去法:SolveGauss
引數:為一個 n x n+1 維的陣列
其原始方程式 AX = C 為 | ![]() |
其引數陣列 gMatrix() 為 | ![]() |
其傳回陣列 gMatrix() 為 | ![]() |
傳回值 | 說明 |
-1 | 陣列維度檢查不為 n x n+1 維 |
0 | 無解 |
1 | 唯一解 |
2 | 無限多組解 |
3 | 相依方程式,無解或無限多組解 |
變數轉 2 進位:VariantToBinary(Expression[, NotZero][, BigEndian])
引數 | 說明 |
Expression | 目前僅支援短整數(Integer)、長整數(Long)、單精度變數(Single)、倍精度變數(Double)、貨幣(Currency)、日期(Date)、字串(String)、物件(Object)、錯誤(Error)、布林(Boolean)、十進位值(Decimal)、位元(Byte)、陣列(Array),其他目前無需求,暫不考慮發展! |
NotZero | 前置 0 是否保留,預設為不保留 (True) |
BigEndian | 來源字串是否為由高位元往低位元排序 |
呼叫範例:
型態 | Expression | NotZero | BigEndian | 傳回值 |
短整數 | 1 | 省略 | True | 1 |
短整數 | 1 | False | True | 0000000000000001 |
長整數 | -1& | False | True | 11111111111111111111111111111111 |
單精度 | -1! | False | True | 10111111100000000000000000000000 |
倍精度 | -1# | False | True | 1011111111110000000000000000000000000000000000000000000000000000 |
貨幣 | -1@ | False | True | 1111111111111111111111111111111111111111111111111101100011110000 |
日期 | 2000/6/15 | False | True | 0100000011100001111010101000000000000000000000000000000000000000 |
字串 | 培基語言 | False | 省略 | 1111100101010111111110100101011110011110100010100000000010001010 |
布林 | True | False | True | 1111111111111111 |
位元 | 1 | False | True | 00000001 |
錯誤 | CVErr(1) | False | True | 0000000000000001 |
十進位值 | CDec(1) | 省略 | True | 1000000000000000000000000000000000000000000000000 |
物件(Object) :
Dim tFont As New StdFont
Debug.Print VariantToBinary(tFont, , True)
' 傳回物件在記憶體位置之 2進位值 1001010100100111000010101100陣列 (Array) :
ReDim TestArray(1 To 3)
TestArray(1) = CByte(1) : TestArray(2) = 1 : TestArray(3) = -1!
Debug.Print VariantToBinary(TestArray, False, True)
' 傳回 00000001000000000000000110111111100000000000000000000000附註:
字串傳回的是 UniCode 的 2 進位值,若需傳回 ASCII 的 2 進位值,則改為:
VariantToBinary(StrConv("培基語言",vbFromUnicode))
' 傳回 1011000011110110101100001111001010111011011110011010100010100101由於 Windows 採用 Little Endian ,故預設改依記憶體順序排列,欲輸出類同 Hex 先高位元後低位元者,則需設定 BigEndian 引數為 True
位元組轉 16 進位:ByteToHex(ByVal hBytes)
引數 | 說明 |
hBytes | 位元組或位元組陣列 |
說明:
本函數為變數轉16進位之子函數,主要為用途為將記憶體內之資料以 16 進位送出,便於除錯
呼叫範例:
Public Function VariantToHex(ByVal Expression)
tBytes = VariantToBytes(Expression)
VariantToHex = ByteToHex(tBytes)End Function
16 進位轉位元組:HexToByte(ByVal HexString As String)
引數 | 說明 |
HexString | 16 進位字串 |
說明:
本函數為16進位轉變數之子函數,主要為用途為將 16 進位字串轉換為位元組陣列送出,便於除錯
呼叫範例:
tByte = HexToByte(HexString)
變數轉位元組:VariantToByte(ByVal Expression[, BigEndian])
引數 | 說明 |
Expression | 目前僅支援短整數(Integer)、長整數(Long)、單精度變數(Single)、倍精度變數(Double)、貨幣(Currency)、日期(Date)、字串(String)、物件(Object)、錯誤(Error)、布林(Boolean)、十進位值(Decimal)、位元(Byte)、陣列(Array),其他目前無需求,暫不考慮發展! |
BigEndian | 輸出位元陣列是否為由高位元往低位元排序 |
說明:
本函數為變數轉16進位、變數轉 2 進位之子函數,主要為用途為將變數轉為位元組陣列後,再決定以 16 進位輸出或 2 進位輸出
呼叫範例:
Public Function VariantToHex(ByVal Expression)
tBytes = VariantToByte(Expression)
VariantToHex = ByteToHex(tBytes)End Function
附註:
由於 Windows 採用 Little Endian ,故預設改依記憶體順序排列,欲輸出類同 Hex 先高位元後低位元者,則需設定 BigEndian 引數為 True
位元組轉 2 進位:ByteToBinary(hBytes, [NotZero])
引數 | 說明 |
hBytes | 位元組或位元組陣列 |
NotZero | 前置 0 是否保留,預設為不保留 (True) |
說明:
本函數為變數轉 2 進位之子函數,主要為用途為將記憶體內之資料以 2 進位送出,便於除錯
呼叫範例:
Public Function VariantToBinary(ByVal Expression, Optional ByVal NotZero As Boolean = True) As String
tBytes = VariantToBytes(Expression)
VariantToBinary = ByteToBinary(tBytes, NotZero)End Function
2 進位轉變數:BinaryToVariant(strBinary, wFlags[, BigEndian]),為 VariantToBinary 之反函數
目前僅支援位元(Byte)、短整數(Integer)、長整數(Long)、單精度變數(Single)、倍精度變數(Double)、貨幣(Currency)、日期(Date)、字串(String)、錯誤(Error)、布林(Boolean)、十進位值(Decimal)、陣列(Array),其他目前無需求,暫不考慮發展!
引數:
strBinary:2 進位字串
wFlags:轉換後之型別,目前支援 vbInteger、vbLong、vbSingle、vbDouble、vbCurrency、vbDate、vbString、VbError、vbBoolean、VbDecimal、vbByte、vbArray
範例:以下範例僅列引數 BinaryToVariant(...)
型態 | strBinary 字串 | wFlags | BigEndian | 傳回值 |
長整數 | 1 | 省略 | True | 1 |
短整數 | 1 | vbInteger | True | 1 |
長整數 | 11111111111111111111111111111111 | vbLong | True | -1& |
單精度 | 10111111100000000000000000000000 | vbSingle | True | -1! |
倍精度 | 1011111111110000000000000000000000000000000000000000000000000000 | vbDouble | True | -1# |
貨幣 | 1111111111111111111111111111111111111111111111111101100011110000 | vbCurrency | True | -1@ |
日期 | 0100000011100001111010101000000000000000000000000000000000000000 | vbDate | True | 2000/6/15 |
字串 | 1111100101010111111110100101011110011110100010100000000010001010 | vbString | 省略 | 培基語言 |
布林 | 1111111111111111 | vbBoolean | True | True |
位元 | 00000001 | vbByte | True | 1 |
錯誤 | 0000000000000001 | VbError | True | CVErr(1) |
十進位值 | 1000000000000000000000000000000000000000000000000 | VbDecimal | True | CDec(1) |
附註:
字串引數使用的是 UniCode 的 2 進位值
陣列 (Array) :
由於難以指定字串分割處,故不支援轉為陣列字串變數
例如即時運算視窗輸入
tVal=BinaryToVariant("0100001011111111",vbByte+vbArray) : For i=LBound(tVal) to UBound(tVal):? tVal(i) : Next
' 傳回
66
255附註:
由於 Windows 採用 Little Endian ,故預設改依記憶體順序排列,欲輸出類同 Hex 先高位元後低位元者,則需設定 BigEndian 引數為 True
2 進位轉位元組:BinaryToByte(ByVal strBinary As String)
引數 | 說明 |
strBinary | 2 進位字串 |
說明:
本函數為2 進位轉變數之子函數,主要為用途為將 2 進位字串轉換為位元組陣列送出,便於除錯
呼叫範例:
tByte = BinaryToByte(strBinary)
位元組轉變數:ByteToVariant(hBytes, wFlags[, BigEndian]),本函數為16進位轉變數之子函數
目前僅支援位元(Byte)、短整數(Integer)、長整數(Long)、單精度變數(Single)、倍精度變數(Double)、貨幣(Currency)、日期(Date)、字串(String)、錯誤(Error)、布林(Boolean)、十進位值(Decimal)、陣列(Array),其他目前無需求,暫不考慮發展!
引數 | 說明 |
hBytes | 位元組或位元組陣列 |
wFlags | 轉換後之型別,目前支援 vbInteger、vbLong、vbSingle、vbDouble、vbCurrency、vbDate、vbString、VbError、vbBoolean、VbDecimal、vbByte、vbArray,預設為 vbLong |
BigEndian | 輸出位元陣列是否為由高位元往低位元排序 |
範例:請參考16進位轉變數
由於難以指定字串分割處,故不支援轉為陣列字串變數
自訂傳回變數型態:myVarType(Expression)
引數 | 說明 |
Expression | 變數 |
說明:
本函數與 VB 內建函數 VarType 相符,主要為修正 VarType 針對 Object 的小 Bug ,如下例, VarType 應該要傳回 9 (vbObject) ,但實際上傳回為 8 (vbString)
呼叫範例:
Dim tFont As New StdFont
Debug.Print VarType(tFont), myVarType(tFont)
' 傳回 8, 9
自訂傳回物件記憶體位置:myObjPtr(hObject)
引數 | 說明 |
hObject | 物件變數 |
說明:
本函數與 VB 內建保留函數 ObjPtr 功能相符
呼叫範例:
Dim tFont As New StdFont
Debug.Print myObjPtr(tFont), ObjPtr(tFont)
' 傳回 6498992, 6498992 (註:每次產生物件記憶體位置並不相同)
傳回特別數學值:GetSpecialValue(lpRepresents, wFlags)
引數 | 說明 |
lpRepresents | 列舉常數,預設為 SV_Plus_Infinity |
wFlags | 單精度或倍精度變數 |
說明:
引數 lpRepresents 之列舉常數說明如下:
lpRepresents | 說明 | 傳回值 |
SV_Plus_Infinity | 正無限大數 | 1.#INF |
SV_Minus_Infinity | 負無限大數 | -1.#INF |
SV_Plus_Not_a_Number | 正非數,類似無意義之數值 | 1.#QNAN |
SV_Minus_Not_a_Number | 負非數,類似無意義之數值 | -1.#QNAN |
呼叫範例:
Debug.Print GetSpecialValue
' 1.#INF
附註:
本函數傳回值若用 IsNumeric 判讀均為真,但 VB 不支援,故無法進行運算,但仍可進行邏輯比較,如搜尋最小值前,可將暫存值設為無窮大等,以保證任一值均小於無窮大
本函數主要供混合語言使用,如當發生 1 除以 0 時,則應為無限大,當發生 0 除以 0 時,則為無意義,此時可設為正非數
本函數參考文件為 IEEE 754 Table D-2, p.187
以高斯消去法解反矩陣:InverseOfGauss(gMatrix)
引數 | 說明 |
gMatrix | 陣列變數 |
說明:
高斯消去法為標準反矩陣解法,若需更快速或記憶體需求更小的演算法,請自行參閱數值分析相關書籍
傳回值 | 說明 |
-2 | 陣列維度檢查不為方陣 |
-1 | 不為陣列 |
其他值 | 含相依向量,無反矩陣 |
陣列 | 唯一解反矩陣 |
呼叫範例:
ReDim tArray(1 To 3, 1 To 3)
tArray(1, 1) = -1: tArray(1, 2) = 2: tArray(1, 3) = -3
tArray(2, 1) = 1: tArray(2, 2) = 2: tArray(2, 3) = 3
tArray(3, 1) = 1: tArray(3, 2) = 1: tArray(3, 3) = 1
aArray = InverseOfGauss(tArray)' 傳回 tArray 反矩陣 aArray
傳回轉置矩陣:MatrixTranspose(gMatrix)
引數 | 說明 |
gMatrix | 陣列變數 |
說明:
傳回值 | 說明 |
-1 | 不為陣列 |
陣列 | 轉置矩陣 |
呼叫範例:
ReDim tArray(1 To 3, 1 To 3)
tArray(1, 1) = -1: tArray(1, 2) = 2: tArray(1, 3) = -3
tArray(2, 1) = 1: tArray(2, 2) = 2: tArray(2, 3) = 3
tArray(3, 1) = 1: tArray(3, 2) = 1: tArray(3, 3) = 1
aArray = MatrixTranspose(tArray)' 傳回 tArray 轉置矩陣 aArray
兩矩陣相乘:MatrixMultiply(gaMatrix, gbMatrix)
引數 | 說明 |
gaMatrix | 陣列變數 |
gbMatrix | 陣列變數 |
說明:
兩矩陣相乘中,若陣列 A 為 i * k 維,則 陣列 B 需為 k * j 維
傳回值 | 說明 |
-2 | 未通過陣列維度檢查 |
-1 | 不為陣列 |
陣列 | 唯一解兩矩陣相乘結果 |
呼叫範例:
ReDim tArray(1 To 3, 1 To 3)
tArray(1, 1) = -1: tArray(1, 2) = 2: tArray(1, 3) = -3
tArray(2, 1) = 1: tArray(2, 2) = 2: tArray(2, 3) = 3
tArray(3, 1) = 1: tArray(3, 2) = 1: tArray(3, 3) = 1
aArray = InverseOfGauss(tArray)
aArray = MatrixMultiply(tArray, aArray)' 傳回 tArray 與 tArray 反矩陣 aArray 相乘矩陣 (單位矩陣)
其他進制轉換成其他 Variant 型態:
本部分屬於垃圾級的技巧,實際上支援這個技巧的函數有16進位轉變數、2 進位轉變數、位元組轉變數及前述相關函數之逆轉換,由於逆轉換為自動轉換,故不特別說明。但 VB 並不支援本部分討論內容轉換後的運算,僅能顯示,故為垃圾級的技巧,為求方便說明僅以16進位轉變數為例說明之,與 VB 內建之型態重複者不再說明,請參閱超連結內之說明
除 VB 內建之型態外,目前僅支援單位元整數(VT_I1)、無符號短整數(VT_UI2)、無符號長整數(VT_UI4)、整數(VT_INT)、無符號整數(VT_UINT),其他目前無需求或是 VB 連顯示都不支援者 (如超長整數(VT_I8)、無符號超長整數(VT_UI8)),暫不考慮發展!
HexToVariant 函數之引數:
HexString:16 進位字串
wFlags:轉換後之型別,目前支援 VT_I1、VT_UI2、VT_UI4、VT_INT、VT_UINT
範例:以下範例僅列引數 Debug.Print HexToVariant(...)
型態 | HexString 字串 | wFlags | 傳回值 |
單位元整數 | 80 | VT_I1 | -128 |
無符號短整數 | FFFF | VT_UI2 | 65535 |
無符號長整數 | FFFFFFFF | VT_UI4 | 4294967295 |
整數 | FFFFFFFF | VT_INT | -1 |
無符號整數 | FFFFFFFF | VT_UINT | 4294967295 |
附註:
- 因 VB 不直接支援本部分說明之運算,為避免初學者誤用, wFlags 需自行輸入,無法利用 VB 提供之自動輸入功能完成
- VB 內建之位元(vbByte)為無符號單位元整數
- 在 32 位元作業系統中,整數之型態及特性類同長整數
轉換成其他 Variant 型態:myVariantChangeType( SourceVariant, ChangeType)
本部分範例同上例屬於垃圾級的技巧, VB 內建之型態均可透過 VB 內建函數轉換,如 CSng 等之類,本函數的優點是單一函數可轉換為任意型態而已
引數 | 型態 | 說明 |
SourceVariant | Variant | 來源變數 |
ChangeType | Long | 欲轉換形態之常數 |
範例:以下範例僅列引數 Debug.Print myVariantChangeType(...)
型態 | SourceVariant | ChangeType | 傳回值 | 備註 |
單位元整數 | -1 | VT_I1 | -1 | |
無符號短整數 | 65535 | VT_UI2 | 65535 | |
無符號長整數 | 4294967295 | VT_UI4 | 4294967295 | |
整數 | -1 | VT_INT | -1 | |
無符號整數 | 4294967295 | VT_UINT | 4294967295 | |
位元 | "255" | VT_UI1 vbByte |
255 | 同VB 內建 CByte 函數 |
字串 | 255 | VT_BSTR vbString |
"255" | 同VB 內建 CStr 函數 |
附註:
- 除 VB 內建之變數型態外, VB 不直接支援本部分說明之運算,基於考量需用此函數轉換應為特殊應用,ChangeType 採 Variant 之所有變數型態, VB 內建常數如 vbByte 等無法利用 VB 提供之自動輸入功能完成,需自行輸入
- 若有 VB 內建函數對應之型態,本範例不再重複,僅介紹位元及字串兩例供比較對照