温馨提示×

vb.net结构体byte数组相互转换怎么实现

小亿
161
2023-10-24 10:53:16
栏目: 编程语言

在VB.NET中,可以使用Marshal类的PtrToStructure方法和StructureToPtr方法来实现结构体和字节数组之间的相互转换。

以下是一个示例代码:

```vb
Imports System.Runtime.InteropServices

Public Structure MyStruct
   Public Field1 As Integer
   Public Field2 As Double
End Structure

Public Class Program
   Public Shared Sub Main()
       ' 创建一个结构体实例
       Dim myStruct As New MyStruct()
       myStruct.Field1 = 10
       myStruct.Field2 = 3.14

       ' 将结构体转换为字节数组
       Dim byteSize As Integer = Marshal.SizeOf(myStruct)
       Dim byteArray(byteSize - 1) As Byte
       Dim structPtr As IntPtr = Marshal.AllocHGlobal(byteSize)
       Marshal.StructureToPtr(myStruct, structPtr, False)
       Marshal.Copy(structPtr, byteArray, 0, byteSize)
       Marshal.FreeHGlobal(structPtr)

       ' 将字节数组转换回结构体
       Dim newStruct As MyStruct = New MyStruct()
       structPtr = Marshal.AllocHGlobal(byteSize)
       Marshal.Copy(byteArray, 0, structPtr, byteSize)
       newStruct = Marshal.PtrToStructure(structPtr, GetType(MyStruct))
       Marshal.FreeHGlobal(structPtr)

       ' 输出转换后的结构体字段值
       Console.WriteLine("Field1: " & newStruct.Field1)
       Console.WriteLine("Field2: " & newStruct.Field2)
   End Sub
End Class
```

运行以上代码,将会输出:

```
Field1: 10
Field2: 3.14
```

这样就实现了结构体和字节数组之间的相互转换。

0