Maison > développement back-end > C++ > Comment convertir des structures C# en tableaux d'octets pour la communication Socket ?

Comment convertir des structures C# en tableaux d'octets pour la communication Socket ?

Patricia Arquette
Libérer: 2025-01-24 14:41:12
original
955 Les gens l'ont consulté

How to Convert C# Structures to Byte Arrays for Socket Communication?

La conversion mutuelle de la structure et du tableau d'octets dans la structure du C #

Lorsque vous utilisez une communication de machine à sous en C #, la structure doit être convertie en tableau d'octets. Cela peut être mis en œuvre par le mécanisme de maréchalage.

Définition de la structure

Considérez la structure suivante:

<code class="language-csharp">public struct CIFSPacket
{
    // 字段定义...
    public string Buffer;
}</code>
Copier après la connexion
Marshalisation (sérialisée)

La classe de maréchal

fournit un traitement de joint de données entre le code d'hébergement et le code non hôte. Convertir la structure en tableau d'octets:

<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;
}</code>
Copier après la connexion
Unmarshalling

Le tableau d'octets est converti à la structure:

Marshaling
<code class="language-csharp">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

Lors de l'étanchéité de la chaîne dans la structure de traitement, assurez-vous d'utiliser la représentation de la chaîne spécifiée d'attribut

. Pour

une telle chaîne de longueur fixe dans l'exemple de structure, veuillez utiliser: [MarshalAs] Buffer

L'un de 100 est remplacé par la longueur de chaîne maximale.
<code class="language-csharp">[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)]
public string Buffer;</code>
Copier après la connexion

Résumé

En utilisant le maréchalage, la structure peut être facilement convertie en réseau d'octets pour la transmission des données. Cette technologie est généralement utilisée dans les applications réseau, telles que l'envoi et la réception de messages par des sockets.

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