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 :
Inclure les fichiers d'en-tête : Ajoutez using System.Runtime.InteropServices;
au début du programme.
Fonction getBytes : Définir une fonction pour convertir une structure CIFSPacket en un tableau d'octets :
<code class="language-csharp"> 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>
Fonction fromBytes : Définit une fonction pour reconvertir un tableau d'octets en une structure CIFSPacket :
<code class="language-csharp"> 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>
Autres notes :
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)]
pour représenter une chaîne d'une taille maximale de 100. Exemple d'utilisation :
Fonction d'envoi :
<code class="language-csharp">byte[] byteArr = getBytes(packet); MyPing.SendTo(byteArr);</code>
Fonction de réception :
<code class="language-csharp">byte[] receivedArr = null; // 接收数据包 CIFSPacket receivedPacket = fromBytes(receivedArr);</code>
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!