2017-11-21 1 views
0

Ich habe viele Beispiele gesehen, wie man eine Struktur in ein Byte-Array konvertiert, indem man ein neues Byte-Array erstellt.Wie schreibe ich eine Struktur in ein bereits existierendes Byte-Array?

Aber ich versuche, dies zu vermeiden. Ich habe einen Nachrichtenpuffer von Byte [1024] und ich möchte meine Struktur in dieses Byte-Array von Index 1 an schreiben. Index 0 ist die Kopfzeile, also überspringe ich diese.

Ich kann keine Beispiele dafür finden, ohne ein neues Byte-Array zu erstellen. Ist das überhaupt möglich?

Wie ich konvertieren derzeit Objekte Bytefeldgruppen:

public static byte[] GetBytes<T>(T data) 
    { 
     int size = Marshal.SizeOf(data); 
     byte[] arr = new byte[size]; 
     IntPtr ptr = Marshal.AllocHGlobal(size); 

     Marshal.StructureToPtr(data, ptr, true); 
     Marshal.Copy(ptr, arr, 0, size); 
     Marshal.FreeHGlobal(ptr); 

     return arr; 
    } 

Das Problem dabei seine bei Index 0 das Objekt auf einem neuen Array schreiben muss ich es Index 1 weiter anzuwenden. Wobei Index 0 die Größe der Struktur in Bytes angibt.

+0

Wenn Sie Um ein vorhandenes Byte-Array zu verwenden, anstatt ein neues Byte-Array zu erstellen, übergeben Sie das vorhandene Byte-Array und verwenden Sie es. Welches Problem hast du damit? – Servy

+0

Welche Serialisierungs-API verwenden Sie? Welche Beispiele? Es gibt keine kanonische Methode, um eine willkürliche Struktur in ein Byte-Array umzuwandeln, so dass die Antworten überall stehen, wenn Sie die Frage nicht mit weiteren Informationen oder einem bestimmten Beispiel einschränken. –

+0

Zeigen Sie bitte den Code, den Sie verwenden, um ein neues Byte-Array zu erstellen? –

Antwort

2

mit Ihrem vorhandenen Code als Beispiel, um Ihre Struktur Bytes auf ein bestehendes Array an Position 1, vorbei an die vorhandene Array und die Startposition von 1-Marshal.Copy nur kopieren: wollen

byte[] existingArray = new byte[1024];  // This is your existing 1024 size byte array 

int size = Marshal.SizeOf(data); 
IntPtr ptr = Marshal.AllocHGlobal(size); 

Marshal.StructureToPtr(data, ptr, true); 
Marshal.Copy(ptr, existingArray, 1, size); // Pass your array and start at position 1 
Marshal.FreeHGlobal(ptr);] 
Verwandte Themen