中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么分析.NET中的聯合結構

發布時間:2021-12-27 16:18:33 來源:億速云 閱讀:150 作者:柒染 欄目:編程語言

這期內容當中小編將會給大家帶來有關怎么分析.NET中的聯合結構,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

下面介紹.NET中的聯合結構。

在進行某些算法的C語言編程的時候,需要使幾種不同類型的變量存放到同一段內存單元中。也就是使用覆蓋技術,幾個變量互相覆蓋。這種幾個不同的變量共同占用一段內存的結構,在C語言中,被稱作“共用體”類型結構,簡稱共用體,也叫聯合體
在C++中有一種類型叫做聯合體(也叫共用體),它的關鍵字為union,在使用上與結構struct非常相似,可以包含任何的結構類型數據,但它又有一個非常獨特的特性,那就是所有的數據都指向一個地址。

這個意思你可以理解為:聯合體中的所有數據都是引用一個內存塊中相同地址的數據,當我們改變這個聯合體內任何一種數據的值時,其他的數據的值都會隨之改變。

這對于未知類型的數據非常有效,你可以使用聯合體裝載一個數據,然后分析其數據是否有效,或者可以對某些特殊的類型進行位運算,獲取其特殊位置的數值。 www.yzjxsp.com

但在VB.NET或C#中,根本沒有union關鍵字讓我們聲名聯合體,但該怎么做才能聲名聯合體呢?

這需要用到結構屬性!

讓我們看看如何將下面的C++聯合體代碼轉換為一個VB.NET的聯合結構吧!

union myunion   {   char b; //單字節整數,在c語言中用char類型來表示單字節整數   short s; //雙字節整數 www.liuhebao.com   int i; //四字節整數   }

這個聯合體大小為4個字節,其各個數據分別表示為單字節、雙字節、四字節的整數,在運行期間其任何數據的改變都會影響其他數據。

Improts System.Runtime.InteropServices '引入運行時非托管數據管理服務

引入結構屬性,精確控制結構中元素的位置

<StructLayout(LayoutKind.Explicit)> _   Structure MyUnion   ' 設置字段的偏移值,設為0即可   <FieldOffset(0)> Dim b As Byte '單字節整數   <FieldOffset(0)> Dim s As Short '雙字節整數   <FieldOffset(0)> Dim i As Integer '四字節整數   End Structure www.yzyedu.com

這就是在.NET中設置聯合結構的方法,C#中于VB.NET中的設置方法雷同,這里就不做贅述了。

下面來介紹聯合體的特性應用,就以上面我們剛才聲名的聯合體結構為例,下面的代碼將為我們演示聯合體的特性:

Dim MU As New MyUnion   MsgBox(String.Format("{0} {1} {2}", MU.b, MU.s, MU.i)) '0 0 0   MU.s = Int16.MaxValue   MsgBox(String.Format("{0} {1} {2}", MU.b, MU.s, MU.i)) '255 32767 32767   MU.b = 12   MsgBox(String.Format("{0} {1} {2}", MU.b, MU.s, MU.i)) '12 32524 32524   MU.i = 0   MsgBox(String.Format("{0} {1} {2}", MU.b, MU.s, MU.i)) '0 0 0

上面的代碼可以更直觀地顯示數據在內存中的變化,每當改變聯合數據時,其他的數據也會隨著內存的變化而變化。

當然,使用聯合體也有限制,那就是.NET的聯合體只適用于值類型,無法應用在引用類型和指針中,你無法設置字符串(String)或是數組進入聯合類型,這一點需要非常的注意!

當然,.NEt中的聯合結構體并不只有上面的用法,你可以發揮自己的想象力,比如可以:

<StructLayout(LayoutKind.Explicit)> _   Structure MyUnion2 www.jokedu.com   <FieldOffset(0)> Dim b1 As Byte   <FieldOffset(1)> Dim b2 As Byte   <FieldOffset(2)> Dim b3 As Byte   <FieldOffset(3)> Dim b4 As Byte   <FieldOffset(0)> Dim i As Integer   <FieldOffset(0)> Dim ui As UInteger   End Structure

這個結構可以獲取一個有或無符號的四個字節整數每一個字節的數據,而不需要自己寫算法來分析了。

測試代碼:

Code:

Dim MU As MyUnion2   MsgBox(MU.i & " : " & MU.ui) '0 : 0   MsgBox(String.Format("{0} {1} {2} {3}", Hex(MU.b1), Hex(MU.b2), Hex(MU.b3), Hex(MU.b4))) '0 0 0 0   MU.b1 = 255 : MU.b2 = 255 : MU.b3 = 255 : MU.b4 = 255   MsgBox(String.Format("{0} {1} {2} {3}", Hex(MU.b1), Hex(MU.b2), Hex(MU.b3), Hex(MU.b4))) 'FF FF FF FF   MsgBox(MU.i & " : " & MU.ui) '-1 : 4294967295

上述就是小編為大家分享的怎么分析.NET中的聯合結構了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

镶黄旗| 城市| 上栗县| 翁牛特旗| 柳河县| 西平县| 南汇区| 乡城县| 乌兰察布市| 安徽省| 宜昌市| 五大连池市| 高要市| 海南省| 武穴市| 广东省| 乌鲁木齐县| 盘山县| 平阳县| 麻栗坡县| 固原市| 天津市| 阳东县| 台安县| 海原县| 八宿县| 丹寨县| 平泉县| 运城市| 云梦县| 云和县| 淮北市| 崇义县| 松江区| 科尔| 和林格尔县| 新兴县| 济宁市| 文昌市| 大宁县| 南澳县|