知识大全 探讨.NET中的联合结构

Posted

篇首语:引诱肉体的是金钱和奢望,吸引灵魂的是知识和理智。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 探讨.NET中的联合结构相关的知识,希望对你有一定的参考价值。

探讨.NET中的联合结构  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  导读 在进行某些算法的C语言编程的时候 需要使几种不同类型的变量存放到同一段内存单元中 也就是使用覆蓋技术 几个变量互相覆蓋 这种几个不同的变量共同占用一段内存的结构 在C语言中 被称作“共用体”类型结构 简称共用体 也叫联合体

  在C++中有一种类型叫做联合体(也叫共用体) 它的关键字为union 在使用上与结构struct非常相似 可以包含任何的结构类型数据 但它又有一个非常独特的特性 那就是所有的数据都指向一个地址

  这个意思你可以理解为 联合体中的所有数据都是引用一个内存块中相同地址的数据 当我们改变这个联合体内任何一种数据的值时 其他的数据的值都会随之改变

  这对于未知类型的数据非常有效 你可以使用联合体装载一个数据 然后分析其数据是否有效 或者可以对某些特殊的类型进行位运算 获取其特殊位置的数值

  但在VB NET或C#中 根本没有union关键字让我们声名联合体 但该怎么做才能声名联合体呢?

  这需要用到结构属性!

  让我们看看如何将下面的C++联合体代码转换为一个VB NET的联合结构吧!

  1. union myunion  
  2.  
  3. char b; //单字节整数 在c语言中用char类型来表示单字节整数  
  4. short s; //双字节整数  
  5. int i; //四字节整数  
  6.   

  这个联合体大小为 个字节 其各个数据分别表示为单字节 双字节 四字节的整数 在运行期间其任何数据的改变都会影响其他数据

  1. Improts System Runtime InteropServices  引入运行时非托管数据管理服务 

  引入结构属性 精确控制结构中元素的位置

  1. <StructLayout(LayoutKind Explicit)> _  
  2. Structure MyUnion  
  3.  设置字段的偏移值 设为 即可  
  4. <FieldOffset( )> Dim b As Byte  单字节整数  
  5. <FieldOffset( )> Dim s As Short  双字节整数  
  6. <FieldOffset( )> Dim i As Integer  四字节整数  
  7. End Structure  

  这就是在 NET中设置联合结构的方法 C#中于VB NET中的设置方法雷同 这里就不做赘述了

  下面来介绍联合体的特性应用 就以上面我们刚才声名的联合体结构为例 下面的代码将为我们演示联合体的特性

  1. Dim MU As New MyUnion  
  2. MsgBox(String Format("     "  MU b  MU s  MU i))       
  3. MU s = Int MaxValue  
  4. MsgBox(String Format("     "  MU b  MU s  MU i))       
  5. MU b =   
  6. MsgBox(String Format("     "  MU b  MU s  MU i))       
  7. MU i =   
  8. MsgBox(String Format("     "  MU b  MU s  MU i))        

  上面的代码可以更直观地显示数据在内存中的变化 每当改变联合数据时 其他的数据也会随着内存的变化而变化

  当然 使用联合体也有限制 那就是 NET的联合体只适用于值类型 无法应用在引用类型和指针中 你无法设置字符串(String)或是数组进入联合类型 这一点需要非常的注意!

  当然 NEt中的联合结构体并不只有上面的用法 你可以发挥自己的想象力 比如可以

  1. <StructLayout(LayoutKind Explicit)> _  
  2. Structure MyUnion  
  3. <FieldOffset( )> Dim b  As Byte 
  4. <FieldOffset( )> Dim b  As Byte 
  5. <FieldOffset( )> Dim b  As Byte 
  6. <FieldOffset( )> Dim b  As Byte 
  7. <FieldOffset( )> Dim i As Integer 
  8. <FieldOffset( )> Dim ui As UInteger  
  9. End Structure  

  这个结构可以获取一个有或无符号的四个字节整数每一个字节的数据 而不需要自己写算法来分析了

  测试代码

  1. Dim MU As MyUnion  
  2. MsgBox(MU i & " : " & MU ui)   :   
  3. MsgBox(String Format("       "  Hex(MU b )  Hex(MU b )  Hex(MU b )  Hex(MU b )))         
  4. MU b  =   : MU b  =   : MU b  =   : MU b  =   
  5. MsgBox(String Format("       "  Hex(MU b )  Hex(MU b )  Hex(MU b )  Hex(MU b )))  FF FF FF FF  
  6. MsgBox(MU i & " : " & MU ui)   :   
cha138/Article/program/net/201311/14020

相关参考

知识大全 深入探讨.NET中的钩子技术[1]

深入探讨.NET中的钩子技术[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一介绍  本文

知识大全 深入探讨.NET中的钩子技术[2]

深入探讨.NET中的钩子技术[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  三使用代码  

知识大全 深入探讨.NET中的钩子技术[3]

深入探讨.NET中的钩子技术[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &nb

知识大全 深入探讨.NET中的钩子技术[5]

深入探讨.NET中的钩子技术[5]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &nb

知识大全 深入探讨.NET中的钩子技术[4]

深入探讨.NET中的钩子技术[4]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在这个方法中我

工业废水处理池防腐蚀材料及结构探讨

本文就常见的工业污废水砼处理池中的防腐蚀技术进行了一总结和探讨。一、前言随着国民经济的迅速发展,大量新的工厂、矿山得以投产运行。由于工艺原因,会产生大量的工业污水和废水,原来相当数量的厂矿企业会直接向

工业废水处理池防腐蚀材料及结构探讨

本文就常见的工业污废水砼处理池中的防腐蚀技术进行了一总结和探讨。一、前言随着国民经济的迅速发展,大量新的工厂、矿山得以投产运行。由于工艺原因,会产生大量的工业污水和废水,原来相当数量的厂矿企业会直接向

工业废水处理池防腐蚀材料及结构探讨

本文就常见的工业污废水砼处理池中的防腐蚀技术进行了一总结和探讨。一、前言随着国民经济的迅速发展,大量新的工厂、矿山得以投产运行。由于工艺原因,会产生大量的工业污水和废水,原来相当数量的厂矿企业会直接向

高级氧化技术在有机污水处理中的联合应用

本篇文章主要以工业污水的高级氧化处理技术来作为目标,对其中对于多种高级氧化技术实特性、使用范围以及处理技术的发展方向进行了全方位的探讨。同时对于多种不同的污水处理技术中进行了全面的对比分析,以期为我国

高级氧化技术在有机污水处理中的联合应用

本篇文章主要以工业污水的高级氧化处理技术来作为目标,对其中对于多种高级氧化技术实特性、使用范围以及处理技术的发展方向进行了全方位的探讨。同时对于多种不同的污水处理技术中进行了全面的对比分析,以期为我国