[pliss] copiar matriz de byte en una estructura

Iniciado por _katze_, 19 Enero 2012, 21:47 PM

0 Miembros y 1 Visitante están viendo este tema.

_katze_

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

seba123neo

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
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

_katze_

leo pruebo y te digo, gracias, la verdad no encontre pero lo mas seguro busque mal.