Записать в файл структуру двоичных данных - Visual Basic .NET
Формулировка задачи:
Всем здравствуйте.
Как записать в файл (считать из файла) структуру двоичных данных?
В Form_Load:
то есть размер структуры должен быть 4 + 2 + 2 + 2 + (4x100) = 410 байт.
Как увидеть размер структуры после применения ReDim?
Листинг программы
- 'Вариант объявления структуры "байт за байтом" (без выравнивания границ)
- <StructLayout(LayoutKind.Sequential, Pack:=1)> _
- Structure StrCurrData
- Public t As Integer
- Public d As Short
- Public m As Short
- Public y As Short
- Public v() As Single
- End Structure
- Public scd As StrCurrData
Листинг программы
- ReDim scd.v(99)
Решение задачи: «Записать в файл структуру двоичных данных»
textual
Листинг программы
- Imports System.Runtime.InteropServices
- Imports System.Text
- Public Class Form1
- Private Structure Test
- Dim Var1 As Short
- Dim Var2 As Short
- End Structure
- Dim ByteArray() As Byte
- 'Перевод структуры в байты
- Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
- Dim Tst As Test
- Tst.Var1 = 911
- Tst.Var2 = 7
- Dim Ptr As IntPtr = Marshal.AllocHGlobal(Marshal.SizeOf(Tst))
- ReDim ByteArray(Marshal.SizeOf(Tst) - 1)
- Marshal.StructureToPtr(Tst, Ptr, False)
- Marshal.Copy(Ptr, ByteArray, 0, Marshal.SizeOf(Tst))
- Marshal.FreeHGlobal(Ptr)
- End Sub
- 'Из байтов в структуру
- Private Function BulidStr(ByVal Buff() As Byte, ByVal MyType As System.Type) As Object
- Dim MyGC As GCHandle = GCHandle.Alloc(Buff, GCHandleType.Pinned)
- Dim Obj As Object = Marshal.PtrToStructure(MyGC.AddrOfPinnedObject, MyType)
- Return Obj
- MyGC.Free()
- End Function
- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
- Dim Tst As Test
- Tst = BulidStr(ByteArray, Tst.GetType)
- MsgBox(Tst.Var1.ToString)
- MsgBox(Tst.Var2.ToString)
- End Sub
- End Class
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д