Wie die Zuweisung von byte[] ist ein Zeiger in C#

Ich habe eine Funktion, die erzeugt einen CRC-Prüf-byte auf der Grundlage der Inhalte von jedem Paket.Das problem ist in der übersetzung die Funktion von C++ zu C#

C++ - code:

unsigned char GenerateCheckByte( char* packet, int length, unsigned long seed )
{
if( !packet ) return 0;
unsigned long checksum = 0xFFFFFFFF;
length &= 0x7FFF;
char* ptr = packet;
unsigned long moddedseed = seed << 8;
for( int i = 0; i < length; i++ )
    checksum = ( checksum >> 8 ) ^ table[moddedseed + ( ( *(ptr++) ^ checksum ) & 0xFF )];
unsigned char result = ( (checksum>>24)&0xFF ) + ( (checksum>>8)&0xFF ) + ( (checksum>>16)&0xFF ) + ( checksum&0xFF );
return result;
}

char*(Paket) kann auch definiert werden als LPBYTE,die Idee ist, dass der Wert zugewiesen *Paket zugeordnet ist, *ptr und wie Sie sehen, *ptr erhöht.Was bedeutet ein byte-array übergeben wird und durch die Erhöhung der Wert des Zeigers geht es zum nächsten byte.

Habe ich versucht, es zu tun in C# und nicht oft.Nach einiger harter Arbeit, die ich dachte, ein bisschen code,aber ich kann nicht ausgeführt werden 😕

C# - code

    public static unsafe byte GenerateCheckByte(byte *packet, int length, UInt32 seed )
    {
        if (*packet == 0)
        return 0;
        UInt32 checksum = 0xFFFFFFFF;
        length &= 0x7FFF;
        byte *ptr = packet;
        UInt32 moddedseed = seed << 8;
        for (int i = 0; i < length; i++)
            checksum = ( checksum >> 8 ) ^ Table.table[moddedseed + ( ( *(ptr++) ^ checksum ) & 0xFF )];
        byte result = (byte)(( (checksum>>24)&0xFF ) + ( (checksum>>8)&0xFF ) + ( (checksum>>16)&0xFF ) + ( checksum&0xFF ));
        return result;
    }

Sieht es nicht so schlimm,aber ich kann es nicht nennen

  unsafe
  {
      packetBuffer[5] = Functions.GenerateCheckByte(&packetBuffer[0], 18, packet.seedCRC);
  }

Fehler: "nehmen Sie nur die Adresse eines unfixierten Ausdruck in einer fixed-Anweisung Initialisierung"

Bitte beachten Sie

packetbuffer in C++ - und C# - Anwendung ist byte[] packetBuffer = new byte[18];

InformationsquelleAutor Ivan Prodanov | 2009-03-28

Schreibe einen Kommentar