Test Foro de elhacker.net SMF 2.1

Programación => Programación General => .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 (vbnet) [Seleccionar]
Imports System
Imports System.Runtime.InteropServices

Public Class Form1

    <StructLayout(LayoutKind.Sequential, Pack:=1)> _
    Private Structure MyStruct
        Public id As Integer
        <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=20)> _
        Public text As String
    End Structure

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        'Llenamos la estructura con algunos datos
        Dim msg As MyStruct
        msg.id = 888
        msg.text = "Holaaaaaa1"

        'La convertimos a Bytes
        Dim bytes As Byte() = StructToByteArray(msg)

        'Convertimos el array de bytes a la estructura nuevamente
        Dim msg2 As MyStruct = ByteArrayToStruct(bytes)
        MsgBox(msg2.id)
        MsgBox(msg2.text)

    End Sub

    Private Function ByteArrayToStruct(ByVal bytes As Byte()) As MyStruct
        Dim handle As GCHandle = GCHandle.Alloc(bytes, GCHandleType.Pinned)
        Dim stuff As MyStruct = DirectCast(Marshal.PtrToStructure(handle.AddrOfPinnedObject(), GetType(MyStruct)), MyStruct)
        handle.Free()
        Return stuff
    End Function

    Private Function StructToByteArray(ByVal logFont As MyStruct) As Byte()
        Dim length As Integer = Marshal.SizeOf(logFont)
        Dim ptPoint As IntPtr = Marshal.AllocHGlobal(length)
        Marshal.StructureToPtr(logFont, ptPoint, True)
        Dim bff As Byte() = New Byte(length - 1) {}
        Marshal.Copy(ptPoint, bff, 0, length)
        Marshal.FreeHGlobal(ptPoint)
        Return bff
    End Function
End Class
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.