Maison > développement back-end > C++ > Comment convertir une structure C# en un tableau d'octets à l'aide du marshaling ?

Comment convertir une structure C# en un tableau d'octets à l'aide du marshaling ?

Mary-Kate Olsen
Libérer: 2025-01-24 14:57:13
original
941 Les gens l'ont consulté

How to Convert a C# Structure to a Byte Array Using Marshaling?

Dans le C #, la structure est convertie en tableau d'octets

En C #, la conversion de la structure en tableau d'octets est une technique courante pour la transmission de données réseau ou le stockage de données binaires. Ce guide montrera comment utiliser le maréchalage pour terminer cette opération.

Le code que vous fournissez définit une structure appelée CIFSPACKET, qui contient divers champs qui représentent le paquet de données réseau. Pour convertir cette structure en tableau d'octets, suivez les étapes suivantes:

<code class="language-csharp">using System.Runtime.InteropServices;

// 将结构体转换为字节数组的函数
public static byte[] GetBytes(CIFSPacket str)
{
    int size = Marshal.SizeOf(str);
    byte[] arr = new byte[size];

    IntPtr ptr = IntPtr.Zero;
    try
    {
        ptr = Marshal.AllocHGlobal(size);
        Marshal.StructureToPtr(str, ptr, true);
        Marshal.Copy(ptr, arr, 0, size);
    }
    finally
    {
        Marshal.FreeHGlobal(ptr);
    }
    return arr;
}

// 将字节数组转换为结构体的函数
public static CIFSPacket FromBytes(byte[] arr)
{
    CIFSPacket str = new CIFSPacket();

    int size = Marshal.SizeOf(str);
    IntPtr ptr = IntPtr.Zero;
    try
    {
        ptr = Marshal.AllocHGlobal(size);
        Marshal.Copy(arr, 0, ptr, size);
        str = (CIFSPacket)Marshal.PtrToStructure(ptr, str.GetType());
    }
    finally
    {
        Marshal.FreeHGlobal(ptr);
    }
    return str;
}</code>
Copier après la connexion
Veuillez noter que pour le champ de chaîne de tampon dans CIFSPACKET, vous devrez peut-être spécifier la propriété de maréchalage pour l'utiliser correctement avec le maréchalage. Ce qui suit est un exemple:

<code class="language-csharp">[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)]
public string Buffer;</code>
Copier après la connexion
N'oubliez pas, définissez la valeur SizeConst en fonction de la taille maximale attendue de la chaîne de tampon.

Avec ces fonctions, vous pouvez utiliser GetBytes () pour convertir facilement la structure CIFSPACKET en tableau d'octets, et utiliser desBytes () pour le convertir du tableau d'octets. Cela fournit une méthode pratique pour fonctionner et transmettre votre structure dans des formats binaires.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal