|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Mar 2006
Città: Provincia di Lecco
Messaggi: 321
|
[C#] Problema traduzione funzione da altro linguaggio
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 Codice:
Private Function CRCcalc(packet As String) As Long [...] End Function Codice:
word CRCcalc(char *packet) [...] C# Codice:
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; } 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 ![]() ![]()
__________________
CONFIGURAZIONE PC FISSOAlimentatore:Levicom X-Alien 450W.CPU:Intel Core 2 Duo E6600 @2975MHz per ora...VGA:Sapphire x1950 xt 256 mb @634/945 MOBO:P5N-E SLI RAM:2Gb Corsair XMS2 6400 cas4||BENCHMARK PC FISSO 3dMark05:12810 3dMark06:6546||Internet:Fastweb 6mbit/s||PORTATILEAcer Aspire 5920G.CPU:Intel Core 2 Duo T5550.VGA:nVidia 8600M GT 512mb.RAM:3 gb.HDD:160gb Ultima modifica di Radeon89 : 21-06-2013 alle 22:09. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
La funzione scritta in C# sintatticamente corretta dovrebbe essere questa (anche la traduzione in C presenta diversi errori):
Codice:
private long CRCcalc(string sPacket) { int a, c, j; long crc = 0, d; for (j = 0; j < sPacket.Length; j++) { a = (int)sPacket[j]; for (c = 0; c < 8; c++) { d = crc ^ a; crc = crc >> 1; if ((d & 1) != 0) { crc = crc | 0x8000; crc = crc ^ 0x2001; } a = a >> 1; } } return crc; } |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Mar 2006
Città: Provincia di Lecco
Messaggi: 321
|
Grazie, pare che funzioni
![]()
__________________
CONFIGURAZIONE PC FISSOAlimentatore:Levicom X-Alien 450W.CPU:Intel Core 2 Duo E6600 @2975MHz per ora...VGA:Sapphire x1950 xt 256 mb @634/945 MOBO:P5N-E SLI RAM:2Gb Corsair XMS2 6400 cas4||BENCHMARK PC FISSO 3dMark05:12810 3dMark06:6546||Internet:Fastweb 6mbit/s||PORTATILEAcer Aspire 5920G.CPU:Intel Core 2 Duo T5550.VGA:nVidia 8600M GT 512mb.RAM:3 gb.HDD:160gb |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 03:21.