Frage

Wie Sie vielleicht schon wissen, ich bin die Migration in C # und einige Dinge in C ++ anders aussehen.

C ++ Code

    BYTE packetBuffer[32] = {0};
    *(LPWORD)(packetBuffer + 0) = 0xC;
    *(LPWORD)(packetBuffer + 2) = 0x5000;
    *(LPDWORD)(packetBuffer + 6) = dwArgs[13];
    *(LPDWORD)(packetBuffer + 10) = *(keyArray2 + 0);
    *(LPDWORD)(packetBuffer + 14) = *(keyArray2 + 1);

Hinweis dwArgs und keyArray2 sind "Array von DWORD"

Dies ist, wie es platziert

  1. packetbuffer [0] wird 0xC
  2. packetbuffer [1] wird 0x00
  3. packetbuffer [2] wird 0x50
  4. packetbuffer [3] wird 0x00

und so weiter

Wie das in C # tun?

Ich habe versucht, aber es funktioniert nicht

packetBuffer[0] = 0xC;
packetBuffer[2] = (byte)0x5000; //error
packetBuffer[6] = (byte)dwArgs[13];
War es hilfreich?

Lösung

Sie können mit BitConverter Daten konvertieren und von Byte-Arrays. Leider gibt es keine Möglichkeit, in eine bestehende Array zu kopieren. Meine eigene EndianBitConverter in meinem MiscUtil Bibliothek dies ermöglicht es, wenn Sie es brauchen, so gut wie Sie erlaubt zur Angabe der endianness natürlich zu verwenden. (BitConverter ist in der Regel wenig Endian in .NET -. Sie es mit dem IsLittleEndian Feld überprüfen)

Zum Beispiel:

EndianBitConverter converter = EndianBitConverter.Little;
converter.CopyBytes((short) 0xc, packetBuffer, 0);
converter.CopyBytes((int) 0x5000, packetBuffer, 2);
converter.CopyBytes(dwArgs[13], packetBuffer, 6);

usw. Die Besetzung im zweiten Aufruf int ist überflüssig CopyBytes, aber aus Gründen der Übersichtlichkeit enthalten (unter Berücksichtigung der vorherigen Zeile!).

EDIT: Eine andere Alternative, wenn Sie nicht mit den .NET-Standardbibliotheken bleiben würde, möchten Sie vielleicht BinaryWriter mit MemoryStream .

Andere Tipps

Sie können nicht. C # ist stark typisiert. Eine Variable hat eine, und nur eine Art. Tricksen wie die reinterpret_cast C ++ ist nicht erlaubt.

Es gibt mehrere Ansätze, um Ihr Problem though. Die erste, und offensichtlich ist, ist die Einbau-Serialisierung Rahmen zu verwenden. Kümmern Sie sich nicht Ihre eigene Serialisierung Code zu schreiben, wenn Sie zu haben. Und in .NET, nicht wahr oft müssen.

Die zweite ist die BitConverter Klasse zu verwenden (die GetBytes Verfahren zur Umwandlung von zu Bytedatenfeld den Trick sollte)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top