VB.net小技巧——VB.net中的结构体和共用体

news/2024/12/21 20:30:26/

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

VB.net小技巧——VB.net中的结构体和共用体

  • 前言
  • 结构体和共用体的定义
  • 一个完整的程序示例
  • 下位机和上位机浮点传输示例
    • 下位机示例
    • 上位机示例


前言

在C语言中,有一种类型名为共用体,关键字为union,它与结构体十分类似,但是它所有的数值全都指向同一个指针。也就是说,当你修改共用体内的某一个数据时,其他数据也会同时改变。
这个类型的好处,在于可以存储某种不确定的数据对象,等到稍后再来分析出该对象的用途。
这个对于数制的转换和传输非常有用。
在之前的VB6.0中,我使用的是CopyMemory的方法,但在现在的VB.net中这里有了新的变化,在这里记录一下

结构体和共用体的定义

union MyUnion
{char b; //单字节整数,在c语言中用char类型来表示单字节整数short s; //双字节整数int i; //四字节整数
}

在 .net 中使用联合体,我们只需要声明一个普通的结构体,然后在结构体上使用属性描述即可。

结构体:

    Structure MyStructDim b0 As ByteDim b1 As ByteDim b2 As ByteDim b3 As ByteDim s As ShortDim us As UShortDim i As IntegerDim ui As UIntegerEnd Structure

联合体:

Imports System.Runtime.InteropServices'引入运行时非托管数据管理服务<StructLayout(LayoutKind.Explicit)> _Structure MyUnion<FieldOffset(0)> Dim b0 As Byte<FieldOffset(1)> Dim b1 As Byte<FieldOffset(2)> Dim b2 As Byte<FieldOffset(3)> Dim b3 As Byte<FieldOffset(0)> Dim s As Short<FieldOffset(2)> Dim us As UShort<FieldOffset(0)> Dim i As Integer<FieldOffset(0)> Dim ui As UIntegerEnd Structure

可以看出 .NET 中的联合体更强大,因为它甚至可以指定某个数值的偏移位置。

一个完整的程序示例

Imports System.Runtime.InteropServices '引入运行时非托管数据管理服务Public Class Form1<StructLayout(LayoutKind.Explicit)> _Structure MyUnion<FieldOffset(0)> Dim b0 As Byte<FieldOffset(1)> Dim b1 As Byte<FieldOffset(2)> Dim b2 As Byte<FieldOffset(3)> Dim b3 As Byte<FieldOffset(0)> Dim s As Short<FieldOffset(2)> Dim us As UShort<FieldOffset(0)> Dim i As Integer<FieldOffset(0)> Dim ui As UInteger<FieldOffset(0)> Dim fd As SingleEnd StructureStructure MyStructDim b0 As ByteDim b1 As ByteDim b2 As ByteDim b3 As ByteDim s As ShortDim us As UShortDim i As IntegerDim ui As UIntegerEnd StructurePrivate Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.ClickDim mu As MyUnion' 一种安全的int与uint转换方法'mu.ui = UInteger.MaxValuemu.i = &H8234567Fmu.ui = &H7234567FMsgBox(mu.i) ' 一个存储与读取IP数据的方法mu.b0 = 128 : mu.b1 = 0 : mu.b2 = 0 : mu.b3 = 1 '127.0.0.1Dim ip As New Net.IPAddress({128, 0, 0, 1})MsgBox(CInt(ip.GetHashCode) = mu.i) 'ip数值相等' 其他用法...mu.ui = UInteger.MaxValueMsgBox(mu.s) '-1MsgBox(mu.us) '65535End SubEnd Class

下位机和上位机浮点传输示例

如果下位机和上位机是通过串口传输

下位机示例

union DoubleToBit 
{unsigned char  char_buffer[8];double   double_num;
};union FloatToBit 
{unsigned char  char_buffer[4];float   float_num;
};void transFloat(float f_ptr)
{int i;unsigned char data;Float_char_union.float_num = f_ptr;for(i = 0 ; i < 4 ; i++){data = Float_char_union.char_buffer[3-i];write_queue_tx(data);}}void transDouble(double d_ptr)
{int i;unsigned char data;Double_char_union.double_num = d_ptr;for(i = 0 ; i < 8 ; i++){data = Double_char_union.char_buffer[7-i];write_queue_tx(data);}}

上位机示例

Imports System.Runtime.InteropServices '引入运行时非托管数据管理服务Public Class Form1<StructLayout(LayoutKind.Explicit)> _Structure MyUnion<FieldOffset(0)> Dim b0 As Byte<FieldOffset(1)> Dim b1 As Byte<FieldOffset(2)> Dim b2 As Byte<FieldOffset(3)> Dim b3 As Byte<FieldOffset(0)> Dim fd As SingleEnd StructureDim mu As MyUnionmu.b0 = hex1 mu.b1 = hex2  mu.b2 = hex3  mu.b3 = hex4  MsgBox(mu.fd)


http://www.ppmy.cn/news/901853.html

相关文章

VB.net:VB编程语言/VB.net语言编程的简介、IDE安装、学习路线(几十项案例代码实现)之详细攻略

VB.net&#xff1a;VB编程语言/VB.net语言编程的简介、IDE安装、学习路线(几十项案例代码实现)之详细攻略 目录 VB编程语言的简介 1、VB编程语言、VBA编程语言、VBS编程语言、VB.net编程语言对比 2、VB语言对比VB.net语言 (1)、VB6.0之前——.NET Framework 引入之前 (2)、…

VB基础教程(一)

第一章 VB的诞生 我们需要什么 我们需要什么&#xff1f;当我们在一个精彩的游戏世界中游历了一番之后&#xff0c;或是惊叹于某一工具软件的小巧精致之余&#xff0c;多少总会产生些许编程的冲动。编程吗&#xff0c;在以前如果你对电脑还是一个门外汉&#xff0c;那实在是一…

vb语言代码大全

VisualBasic是微软公司推出的简单易学、功能强大编程工具,是一种可视化的、面向对象和采用事件驱动方式的结构化高级程序设计语言,使用VB能轻而易举地开发适合在Windows环境下各类应用程序。 本文主要介绍的就是vb语言代码大全,分别从五种常用的vb语言代码中来详细说明,跟随…

VB初步入门

VB 入门记录&#xff08;一&#xff09; 一、Visual Basic 界面简介 打开题目进入界面是这个样子的 ​ 图一 我们的题目信息在这里 ​ 图二 然后当你双击那个产生按钮的时候 ​ 图三 OK&#xff0c;这个时候我们需要用到的窗口界面就基本已经呈现出来了。 工程 在图的…

Visual Basic简介

1 Visual Basic 概述 Visual Basic(简称VB)是Microsoft公司开发的一种通用的基于对象的程序设计语言。 “Visual” 指的是开发图形用户界面 (GUI) 的方法——不需编写大量代码去描述界面元素的外观和位置&#xff0c;而只要把预先建立的对象add到屏幕上的一点即可。 “Basic”…

VB基本概念

VB的特点&#xff1a; 1、易学易用&#xff0c;功能强大 2、Microsoft公司非常重视Visual Basic程序开发语言&#xff0c;不断把新技术运用到VB中 3、提高开发效率&#xff0c;缩短开发周期 4、使用嵌入式Visual Basic语言VB for Application&#xff08;VBA&#xff09;能…

VB基础知识点选编

VB基础知识点选编 一、VB概述 1、VB中基本概念 类&#xff1a; 对象&#xff1a; 方法&#xff1a; 事件&#xff1a; 属性&#xff1a; 事件过程&#xff1a; 理解概念 2、VB的版本&#xff1a; 学习版&#xff1a; 专业版&#xff1a; …

华为OD真题--评选最差产品-带答案

/** * A公司准备对他下面的N个产品评选最差奖&#xff0c;评选的方式是首先对每个产品进行评分&#xff0c;然后根据评分区间计算相邻几个产品中最差的产品。 * 评选的标准是依次找到从当前产品开始前M个产品中最差的产品&#xff0c;请给出最差产品的评分序列。 * * 输入描述&…