Maison > développement back-end > C++ > Comment convertir une structure C # (CIFSPACKET) en un tableau d'octets pour la transmission du réseau?

Comment convertir une structure C # (CIFSPACKET) en un tableau d'octets pour la transmission du réseau?

Barbara Streisand
Libérer: 2025-01-24 14:47:10
original
1000 Les gens l'ont consulté

How to Convert a C# Structure (CIFSPacket) to a Byte Array for Network Transmission?

Conversion de la structure en tableau d'octets en C#

La transmission de données réseau nécessite la conversion de la structure en un tableau d'octets. La réponse suivante explique comment convertir une structure spécifique nommée CIFSPacket en un tableau d'octets en C# :

Question :

Comment convertir une structure CIFSPacket en un tableau d'octets pour la transmission réseau sur un socket ?

Réponse :

L'utilisation du Marshaling est un moyen efficace d'effectuer cette conversion.

Mise en œuvre :

  1. Inclure les fichiers d'en-tête : Ajoutez using System.Runtime.InteropServices; au début du programme.

  2. Fonction getBytes : Définir une fonction pour convertir une structure CIFSPacket en un tableau d'octets :

     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;
     }
    Copier après la connexion
  3. Fonction fromBytes : Définit une fonction pour reconvertir un tableau d'octets en une structure CIFSPacket :

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

Autres notes :

  • Pour les champs de chaîne, spécifiez [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)] pour représenter une chaîne d'une taille maximale de 100.

Exemple d'utilisation :

Fonction d'envoi :

byte[] byteArr = getBytes(packet);
MyPing.SendTo(byteArr);
Copier après la connexion

Fonction de réception :

byte[] receivedArr = null; // 接收数据包
CIFSPacket receivedPacket = fromBytes(receivedArr);
Copier après la connexion

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!

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