vb.net 結(jié)構(gòu)體 byte數(shù)組相互轉(zhuǎn)換

小億
120
2023-12-19 05:25:52

在VB.NET中,可以使用Marshal類的PtrToStructure方法來(lái)將字節(jié)數(shù)組轉(zhuǎn)換為結(jié)構(gòu)體,使用Marshal類的StructureToPtr方法將結(jié)構(gòu)體轉(zhuǎn)換為字節(jié)數(shù)組。

以下是一個(gè)示例代碼:

Imports System.Runtime.InteropServices

Structure MyStruct
    Public Field1 As Integer
    Public Field2 As Double
    ' 定義其他字段...
End Structure

Public Class Program
    Public Shared Sub Main()
        ' 創(chuàng)建結(jié)構(gòu)體實(shí)例
        Dim myStruct As New MyStruct()
        myStruct.Field1 = 10
        myStruct.Field2 = 3.14

        ' 將結(jié)構(gòu)體轉(zhuǎn)換為字節(jié)數(shù)組
        Dim size As Integer = Marshal.SizeOf(myStruct)
        Dim buffer(size - 1) As Byte
        Dim ptr As IntPtr = Marshal.AllocHGlobal(size)
        Marshal.StructureToPtr(myStruct, ptr, False)
        Marshal.Copy(ptr, buffer, 0, size)
        Marshal.FreeHGlobal(ptr)

        ' 將字節(jié)數(shù)組轉(zhuǎn)換為結(jié)構(gòu)體
        Dim myStruct2 As MyStruct = New MyStruct()
        Dim ptr2 As IntPtr = Marshal.AllocHGlobal(size)
        Marshal.Copy(buffer, 0, ptr2, size)
        myStruct2 = DirectCast(Marshal.PtrToStructure(ptr2, GetType(MyStruct)), MyStruct)
        Marshal.FreeHGlobal(ptr2)

        ' 輸出結(jié)果
        Console.WriteLine($"Field1: {myStruct2.Field1}")
        Console.WriteLine($"Field2: {myStruct2.Field2}")
    End Sub
End Class

這個(gè)示例中,首先創(chuàng)建了一個(gè)包含兩個(gè)字段的結(jié)構(gòu)體MyStruct。然后,將結(jié)構(gòu)體實(shí)例轉(zhuǎn)換為字節(jié)數(shù)組,再將字節(jié)數(shù)組轉(zhuǎn)換為結(jié)構(gòu)體實(shí)例,并輸出結(jié)果。

請(qǐng)注意,這里使用的Marshal類來(lái)進(jìn)行字節(jié)數(shù)組和結(jié)構(gòu)體之間的轉(zhuǎn)換。另外,需要引入命名空間System.Runtime.InteropServices。

0