Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menukar Struktur C# kepada Tatasusunan Byte untuk Komunikasi Soket?
penukaran bersama struktur dan array byte dalam struktur dalam C#
definisi struktur
<code class="language-csharp">public struct CIFSPacket { // 字段定义... public string Buffer; }</code>marshaling (bersiri)
<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>unmarshalling
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>
[MarshalAs]
Buffer
satu daripada 100 digantikan dengan panjang rentetan maksimum.
<code class="language-csharp">[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)] public string Buffer;</code>Ringkasan
Dengan menggunakan marshaling, struktur boleh ditukar dengan mudah menjadi array byte untuk penghantaran data. Teknologi ini biasanya digunakan dalam aplikasi rangkaian, seperti menghantar dan menerima mesej oleh soket.
Atas ialah kandungan terperinci Bagaimana untuk Menukar Struktur C# kepada Tatasusunan Byte untuk Komunikasi Soket?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!