Heim > Backend-Entwicklung > C++ > Wie konvertiert man C/C-Datenstrukturen effizient von Byte-Arrays in C#-Strukturen?

Wie konvertiert man C/C-Datenstrukturen effizient von Byte-Arrays in C#-Strukturen?

DDD
Freigeben: 2025-01-19 07:24:11
Original
786 Leute haben es durchsucht

How to Efficiently Convert C/C   Data Structures from Byte Arrays to C# Structures?

C/C-Datenstruktur vom Byte-Array nach C# lesen

Wenn Sie in C# Byte-Array-Daten von einer C/C-Struktur empfangen, müssen Sie das Array in eine kompatible C#-Struktur konvertieren. Die folgenden Methoden bieten einen effizienten Konvertierungspfad.

Verwenden Sie Marshal.PtrToStructure

Diese Methode beinhaltet das Korrigieren eines Byte-Arrays und die Verwendung von Marshal.PtrToStructure, um die Bytes direkt in eine C#-Struktur zu konvertieren.

<code class="language-csharp">NewStuff ByteArrayToNewStuff(byte[] bytes)
{
    GCHandle handle = GCHandle.Alloc(bytes, GCHandleType.Pinned);
    try
    {
        NewStuff stuff = (NewStuff)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(NewStuff));
        return stuff;
    }
    finally
    {
        handle.Free();
    }
}</code>
Nach dem Login kopieren

Universalversion

Diese generische Version ermöglicht die Konvertierung jedes Strukturtyps aus einem Byte-Array:

<code class="language-csharp">T ByteArrayToStructure<T>(byte[] bytes) where T : struct 
{
    GCHandle handle = GCHandle.Alloc(bytes, GCHandleType.Pinned);
    try
    {
        return (T)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(T));
    }
    finally
    {
        handle.Free();
    }
}</code>
Nach dem Login kopieren

Vereinfachte Version

Verwenden Sie für einfache Anwendungen unsichere feste Arrays:

<code class="language-csharp">unsafe T ByteArrayToStructure<T>(byte[] bytes) where T : struct
{
    fixed (byte* ptr = &bytes[0])
    {
        return (T)Marshal.PtrToStructure((IntPtr)ptr, typeof(T));
    }
}</code>
Nach dem Login kopieren

Vergleich von BinaryReader und Marshal.PtrToStructure

BinaryReader funktioniert ähnlich wie Marshal.PtrToStructure und ermöglicht das Lesen von Daten aus Byte-Arrays. Dies verursacht jedoch einen gewissen Mehraufwand und wird im Allgemeinen nicht für leistungskritische Anwendungen empfohlen. Marshal.PtrToStructure arbeitet direkt mit Rohbytes ohne Zwischenkonvertierung, sodass die Leistung schneller ist.

Das obige ist der detaillierte Inhalt vonWie konvertiert man C/C-Datenstrukturen effizient von Byte-Arrays in C#-Strukturen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage