Записать в файл структуру двоичных данных - Visual Basic .NET

Узнай цену своей работы

Формулировка задачи:

Всем здравствуйте. Как записать в файл (считать из файла) структуру двоичных данных?
Листинг программы
  1. 'Вариант объявления структуры "байт за байтом" (без выравнивания границ)
  2. <StructLayout(LayoutKind.Sequential, Pack:=1)> _
  3. Structure StrCurrData
  4. Public t As Integer
  5. Public d As Short
  6. Public m As Short
  7. Public y As Short
  8. Public v() As Single
  9. End Structure
  10. Public scd As StrCurrData
В Form_Load:
Листинг программы
  1. ReDim scd.v(99)
то есть размер структуры должен быть 4 + 2 + 2 + 2 + (4x100) = 410 байт. Как увидеть размер структуры после применения ReDim?

Решение задачи: «Записать в файл структуру двоичных данных»

textual
Листинг программы
  1. Imports System.Runtime.InteropServices
  2. Imports System.Text
  3.  
  4. Public Class Form1
  5.  
  6.     Private Structure Test
  7.         Dim Var1 As Short
  8.         Dim Var2 As Short
  9.     End Structure
  10.  
  11.     Dim ByteArray() As Byte
  12.  
  13.     'Перевод структуры в байты
  14.     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  15.         Dim Tst As Test
  16.         Tst.Var1 = 911
  17.         Tst.Var2 = 7
  18.         Dim Ptr As IntPtr = Marshal.AllocHGlobal(Marshal.SizeOf(Tst))
  19.         ReDim ByteArray(Marshal.SizeOf(Tst) - 1)
  20.         Marshal.StructureToPtr(Tst, Ptr, False)
  21.         Marshal.Copy(Ptr, ByteArray, 0, Marshal.SizeOf(Tst))
  22.         Marshal.FreeHGlobal(Ptr)
  23.     End Sub
  24.  
  25.     'Из байтов в структуру
  26.     Private Function BulidStr(ByVal Buff() As Byte, ByVal MyType As System.Type) As Object
  27.         Dim MyGC As GCHandle = GCHandle.Alloc(Buff, GCHandleType.Pinned)
  28.         Dim Obj As Object = Marshal.PtrToStructure(MyGC.AddrOfPinnedObject, MyType)
  29.         Return Obj
  30.         MyGC.Free()
  31.     End Function
  32.  
  33.  
  34.     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  35.         Dim Tst As Test
  36.         Tst = BulidStr(ByteArray, Tst.GetType)
  37.         MsgBox(Tst.Var1.ToString)
  38.         MsgBox(Tst.Var2.ToString)
  39.     End Sub
  40. End Class

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.7 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы