Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: _katze_ en 19 Enero 2012, 21:47 pm



Título: [pliss] copiar matriz de byte en una estructura
Publicado por: _katze_ en 19 Enero 2012, 21:47 pm
hola amigos quisiera saber y de que manera podria copiar una matriz de byte en una estructura, intente con marshall pero me da error, y se que rtlmovememory podria pero quisiera ver algo que sea nativo.gracias


Título: Re: [pliss] copiar matriz de byte en una estructura
Publicado por: seba123neo en 20 Enero 2012, 02:41 am
Hola, aca un ejemplo de VB .NET para hacer eso, hay mucha info en internet de esto igual, mucho para C#.

Código
  1. Imports System
  2. Imports System.Runtime.InteropServices
  3.  
  4. Public Class Form1
  5.  
  6.    <StructLayout(LayoutKind.Sequential, Pack:=1)> _
  7.    Private Structure MyStruct
  8.        Public id As Integer
  9.        <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=20)> _
  10.        Public text As String
  11.    End Structure
  12.  
  13.    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  14.  
  15.        'Llenamos la estructura con algunos datos
  16.        Dim msg As MyStruct
  17.        msg.id = 888
  18.        msg.text = "Holaaaaaa1"
  19.  
  20.        'La convertimos a Bytes
  21.        Dim bytes As Byte() = StructToByteArray(msg)
  22.  
  23.        'Convertimos el array de bytes a la estructura nuevamente
  24.        Dim msg2 As MyStruct = ByteArrayToStruct(bytes)
  25.        MsgBox(msg2.id)
  26.        MsgBox(msg2.text)
  27.  
  28.    End Sub
  29.  
  30.    Private Function ByteArrayToStruct(ByVal bytes As Byte()) As MyStruct
  31.        Dim handle As GCHandle = GCHandle.Alloc(bytes, GCHandleType.Pinned)
  32.        Dim stuff As MyStruct = DirectCast(Marshal.PtrToStructure(handle.AddrOfPinnedObject(), GetType(MyStruct)), MyStruct)
  33.        handle.Free()
  34.        Return stuff
  35.    End Function
  36.  
  37.    Private Function StructToByteArray(ByVal logFont As MyStruct) As Byte()
  38.        Dim length As Integer = Marshal.SizeOf(logFont)
  39.        Dim ptPoint As IntPtr = Marshal.AllocHGlobal(length)
  40.        Marshal.StructureToPtr(logFont, ptPoint, True)
  41.        Dim bff As Byte() = New Byte(length - 1) {}
  42.        Marshal.Copy(ptPoint, bff, 0, length)
  43.        Marshal.FreeHGlobal(ptPoint)
  44.        Return bff
  45.    End Function
  46. End Class
  47.  


Título: Re: [pliss] copiar matriz de byte en una estructura
Publicado por: _katze_ en 20 Enero 2012, 04:34 am
leo pruebo y te digo, gracias, la verdad no encontre pero lo mas seguro busque mal.