Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Menukar Struktur C# kepada Tatasusunan Byte untuk Komunikasi Soket?

Bagaimana untuk Menukar Struktur C# kepada Tatasusunan Byte untuk Komunikasi Soket?

Patricia Arquette
Lepaskan: 2025-01-24 14:41:12
asal
999 orang telah melayarinya

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

penukaran bersama struktur dan array byte dalam struktur dalam C#

Apabila menggunakan komunikasi slot di C#, struktur perlu ditukar kepada array byte. Ini boleh dilaksanakan melalui mekanisme marshaling.

definisi struktur

Pertimbangkan struktur berikut:

<code class="language-csharp">public struct CIFSPacket
{
    // 字段定义...
    public string Buffer;
}</code>
Salin selepas log masuk
marshaling (bersiri)

Kelas marshal

menyediakan pemprosesan meterai data antara kod hosting dan kod bukan host. Tukar struktur ke array byte:

<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>
Salin selepas log masuk
unmarshalling

Arahan byte ditukar kembali ke struktur:

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>
Salin selepas log masuk

Apabila menyegel rentetan dalam struktur pemprosesan, pastikan anda menggunakan perwakilan rentetan yang ditentukan oleh atribut. Untuk

seperti rentetan panjang tetap dalam struktur contoh, sila gunakan:

[MarshalAs] Buffer satu daripada 100 digantikan dengan panjang rentetan maksimum.

<code class="language-csharp">[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)]
public string Buffer;</code>
Salin selepas log masuk
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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan