Pergunta

Como você já deve saber, eu estou migrando para C # e algumas coisas em C ++ diferente olhar.

código C ++

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

dwArgs nota e keyArray2 são "matriz de DWORD"

Esta é a forma como ele é colocado

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

e assim por diante

Como fazer isso em C #?

Eu tentei isso, mas ele não funciona

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

Solução

Você pode usar BitConverter para converter dados para e a partir de matrizes de bytes. Infelizmente não há nenhuma facilidade para copiar em uma matriz existente. Minha própria EndianBitConverter na minha MiscUtil biblioteca permite que este se você precisar dele, bem como permitindo que você para especificar a ordenação de usar, é claro. (BitConverter é geralmente pouco endian em .NET -. Você pode verificá-lo com o campo IsLittleEndian)

Por exemplo:

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

etc. O elenco para int na segunda chamada para CopyBytes é redundante, mas incluído para maior clareza (tendo em mente a linha anterior!).

EDIT: Outra alternativa se você preferir ficar com o .NET bibliotecas padrão, você pode querer usar BinaryWriter com um MemoryStream .

Outras dicas

Você não pode. C # é fortemente tipado. Uma variável tem um, e apenas um tipo. Artifícios como o C ++ reinterpret_cast não é permitido.

Existem várias abordagens para o problema embora. A primeira e óbvia, é usar a estrutura de serialização embutida. Não se preocupe em escrever o seu próprio código de serialização a menos que você precisa. E em .NET, você não têm muitas vezes a.

O segundo é a utilização da classe BitConverter (o método GetBytes deve fazer o truque para converter a matriz de bytes)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top