導讀
在C++中有一種類型叫做聯合體(也叫共用體)
這個意思你可以理解為
這對於未知類型的數據非常有效
但在VB
這需要用到結構屬性!
讓我們看看如何將下面的C++聯合體代碼轉換為一個VB
- union myunion
- {
- char b; //單字節整數
在c語言中用char類型來表示單字節整數 - short s; //雙字節整數
- int i; //四字節整數
- }
這個聯合體大小為
- Improts System
Runtime InteropServices 引入運行時非托管數據管理服務
引入結構屬性
- <StructLayout(LayoutKind
Explicit)> _ - Structure MyUnion
設置字段的偏移值 設為 即可 - <FieldOffset(
)> Dim b As Byte 單字節整數 - <FieldOffset(
)> Dim s As Short 雙字節整數 - <FieldOffset(
)> Dim i As Integer 四字節整數 - End Structure
這就是在
下面來介紹聯合體的特性應用
- Dim MU As New MyUnion
- MsgBox(String
Format("{ } { } { }" MU b MU s MU i)) - MU
s = Int MaxValue - MsgBox(String
Format("{ } { } { }" MU b MU s MU i)) - MU
b = - MsgBox(String
Format("{ } { } { }" MU b MU s MU i)) - MU
i = - MsgBox(String
Format("{ } { } { }" MU b MU s MU i))
上面的代碼可以更直觀地顯示數據在內存中的變化
當然
當然
- <StructLayout(LayoutKind
Explicit)> _ - Structure MyUnion
- <FieldOffset(
)> Dim b As Byte - <FieldOffset(
)> Dim b As Byte - <FieldOffset(
)> Dim b As Byte - <FieldOffset(
)> Dim b As Byte - <FieldOffset(
)> Dim i As Integer - <FieldOffset(
)> Dim ui As UInteger - End Structure
這個結構可以獲取一個有或無符號的四個字節整數每一個字節的數據
測試代碼
Code
- Dim MU As MyUnion
- MsgBox(MU
i & " : " & MU ui) : - MsgBox(String
Format("{ } { } { } { }" Hex(MU b ) Hex(MU b ) Hex(MU b ) Hex(MU b ))) - MU
b = : MU b = : MU b = : MU b = - MsgBox(String
Format("{ } { } { } { }" Hex(MU b ) Hex(MU b ) Hex(MU b ) Hex(MU b ))) FF FF FF FF - MsgBox(MU
i & " : " & MU ui) :
From:http://tw.wingwit.com/Article/program/net/201311/14020.html