Pregunta

Como usted ya sabe, estoy migrando en C # y algunas cosas en C ++ un aspecto diferente.

C ++ código

    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);

Nota dwArgs y keyArray2 son "gama de DWORD"

Esto es cómo se coloca

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

y así sucesivamente

¿Cómo hacer eso en C #?

He intentado esto, pero no funciona

packetBuffer[0] = 0xC;
packetBuffer[2] = (byte)0x5000; //error
packetBuffer[6] = (byte)dwArgs[13];
¿Fue útil?

Solución

Puede utilizar BitConverter para convertir datos desde y a partir de matrices de bytes. Desafortunadamente no hay facilidad para copiar en una matriz existente. Mi propia EndianBitConverter en mi biblioteca MiscUtil permite esto si lo necesita, así como lo que le para especificar el orden de bits a utilizar, por supuesto. (BitConverter suele ser poco endian en .NET -. Se puede comprobar con el campo IsLittleEndian)

Por ejemplo:

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

etc. El reparto de int en la segunda llamada a CopyBytes es redundante, pero incluido para mayor claridad (teniendo en cuenta la línea anterior!).

EDIT: Otra alternativa si prefiere seguir con las bibliotecas estándar de .NET, es posible que desee utilizar BinaryWriter con un MemoryStream .

Otros consejos

No se puede. C # es fuertemente tipado. Una variable tiene uno, y solamente un tipo. no está permitido Trickery como reinterpret_cast el C ++.

Hay varios enfoques para su problema sin embargo. La primera y obvia, es utilizar el marco de serialización incorporado. No se moleste en escribir su propio código de serialización menos que sea necesario. Y en .NET, usted no tiene que a menudo.

El segundo es el uso de la clase BitConverter (el método GetBytes debe hacer el truco para convertir a la matriz de bytes)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top