Radeon89
09-09-2010, 15:18
Ciao a tutti!
Spero che qualcuno possa aiutarmi a risolvere questo problema che è da due giorni che mi crea grattacapi assurdi.
Devo calcolare un crc, ho già la funzione implementata sia in basic che in C, ma io dovrei implementarla in C#. Il basic non l'ho mai usato quindi non lo conosco bene, mentre il C sì, anche se noto che ci sono errori di sintassi tipo l'assegnamento con ":=" e non con "="...
Le due funzioni tra loro equivalenti sono queste...
BASIC
Private Function CRCcalc(packet As String) As Long
[...]
End Function
C
word CRCcalc(char *packet)
[...]
Io per ora ho scritto il codice seguente. Non sono entrato per niente nel dettaglio di quello che fa questa funzione perché non vorrei addentrarmi nella teoria del checksum, quindi ho tradotto quanto ho potuto e ricopiato il codice in C che credo sia quello più compatibile.
C#
private long CRCcalc(string sPacket)
{
int a, c,j;
long crc, d;
for (j = 0; j < sPacket.Length; j++)
{
a = (int)sPacket[j];
for (c = 0; c < 8; c++)
{
d = crc ^ a;
crc = crc >> 1;
91 if (d & 1)
92 {
93 crc = crc | &8000;
94 crc = crc ^ &2001;
95 }
96 a >> 1;
}
}
return crc;
}
Durante la compilazioni ricevo svariati messaggi di errore
1. Impossibile convertire implicitamente il tipo 'long' in 'bool' RIGA 91
2. Puntatori e buffer con dimensione fissa possono essere utilizzati solo in un contesto unsafe RIGA 93
3. Impossibile accettare l'indirizzo dell'espressione data RIGA 93
4. Impossibile applicare l'operatore '|' a operandi di tipo 'long' e 'int*' RIGA 93
5. Puntatori e buffer con dimensione fissa possono essere utilizzati solo in un contesto unsafe RIGA 94
6. Impossibile accettare l'indirizzo dell'espressione data RIGA 94
7. Impossibile applicare l'operatore '^' a operandi di tipo 'long' e 'int*' RIGA 94
8. Solo le assegnazioni, le chiamate, gli incrementi, i decrementi e le nuove espressioni dell'oggetto possono essere usate come istruzioni RIGA 96
Spero vivamente che possiate aiutarmi, dato che conosco l'argomento checksum solo relativamente al suo utilizzo e a cosa serva, non al suo calcolo e alla teoria che ci sta dietro... Inoltre è la prima volta che mi ritrovo a dover tradurre una funzione da altri linguaggi.
Grazie a tutti in anticipo :) :)
Spero che qualcuno possa aiutarmi a risolvere questo problema che è da due giorni che mi crea grattacapi assurdi.
Devo calcolare un crc, ho già la funzione implementata sia in basic che in C, ma io dovrei implementarla in C#. Il basic non l'ho mai usato quindi non lo conosco bene, mentre il C sì, anche se noto che ci sono errori di sintassi tipo l'assegnamento con ":=" e non con "="...
Le due funzioni tra loro equivalenti sono queste...
BASIC
Private Function CRCcalc(packet As String) As Long
[...]
End Function
C
word CRCcalc(char *packet)
[...]
Io per ora ho scritto il codice seguente. Non sono entrato per niente nel dettaglio di quello che fa questa funzione perché non vorrei addentrarmi nella teoria del checksum, quindi ho tradotto quanto ho potuto e ricopiato il codice in C che credo sia quello più compatibile.
C#
private long CRCcalc(string sPacket)
{
int a, c,j;
long crc, d;
for (j = 0; j < sPacket.Length; j++)
{
a = (int)sPacket[j];
for (c = 0; c < 8; c++)
{
d = crc ^ a;
crc = crc >> 1;
91 if (d & 1)
92 {
93 crc = crc | &8000;
94 crc = crc ^ &2001;
95 }
96 a >> 1;
}
}
return crc;
}
Durante la compilazioni ricevo svariati messaggi di errore
1. Impossibile convertire implicitamente il tipo 'long' in 'bool' RIGA 91
2. Puntatori e buffer con dimensione fissa possono essere utilizzati solo in un contesto unsafe RIGA 93
3. Impossibile accettare l'indirizzo dell'espressione data RIGA 93
4. Impossibile applicare l'operatore '|' a operandi di tipo 'long' e 'int*' RIGA 93
5. Puntatori e buffer con dimensione fissa possono essere utilizzati solo in un contesto unsafe RIGA 94
6. Impossibile accettare l'indirizzo dell'espressione data RIGA 94
7. Impossibile applicare l'operatore '^' a operandi di tipo 'long' e 'int*' RIGA 94
8. Solo le assegnazioni, le chiamate, gli incrementi, i decrementi e le nuove espressioni dell'oggetto possono essere usate come istruzioni RIGA 96
Spero vivamente che possiate aiutarmi, dato che conosco l'argomento checksum solo relativamente al suo utilizzo e a cosa serva, non al suo calcolo e alla teoria che ci sta dietro... Inoltre è la prima volta che mi ritrovo a dover tradurre una funzione da altri linguaggi.
Grazie a tutti in anticipo :) :)