Pages: [1]   Go Down
Author Topic: Calcolo checksum 1 byte  (Read 877 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salve,
premetto di essere un absolute newbee  in C, provengo da basic a vb.net,
vorrei inserire in una funzione il calcolo del checksum ad 1 byte Mod H100,
in VBnet la funzione è questa:

 Public Function CheckSum(ByVal ByteList As List(Of Byte)) As Byte

        Dim total As Integer = 0
        For Each b As Byte In ByteList
            total = (total + b) Mod &H100
        Next
        Return total

    End Function

quale è la "traduzione"  in C ?
google non mi ha dato risposta

Grazie
Mauro
Logged

Fidenza (PR)
Offline Offline
Full Member
***
Karma: 3
Posts: 141
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

prova

Code:

byte CheckSum(byte arr[], int dim_array){
   int total = 0;
   
   for(int i=0; i<dim_array; i++)
            total = (total + arr[i]) % 100;

   return total
}


ma dipende appunto cosa vuole fare la tua funzione.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Intanto grazie per la risposta,
la funzione deve fare la somma BYTE PER BYTE dell'array di byte,
se nei vari passaggi il risultato è >  Hex100 prende come valore l'eccedenza
e prosegue .
 
Logged

Fidenza (PR)
Offline Offline
Full Member
***
Karma: 3
Posts: 141
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

io farei cosi allora

Code:

byte CheckSum(byte arr[], int dim_array){
   byte total = 0;
  
   for(int i=0; i<dim_array; i++)
            total = (total + arr[i]);

   if(total>256) //100h = 256;
      total = total % 256;

   return total
}

« Last Edit: January 12, 2013, 09:21:04 am by mancio » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Scusa, ma  Hex100 è = 256 non 64 ?
giusto?
Logged

Fidenza (PR)
Offline Offline
Full Member
***
Karma: 3
Posts: 141
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

si scusa..modifico il post!!!
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Perfetto,funziona
Grazie ++++
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21624
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Fare un test per controllare se un tipo byte sia maggiore di 256 è inutile perché un tipo byte può contenere solo un numero da 0 a 255.
Se si somma ad una variabile un valore maggiore di quello che può contenere, essa va in overflow, per cui se si fa ad esempio 250+10 il risultato sarà 4 e non 260, si potrebbe evitare quell'operazione modulo (%).
Logged


BZ (I)
Offline Offline
Brattain Member
*****
Karma: 234
Posts: 20208
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

La somma non é un modo buono di fare un checksum. Non si possono rivelare una inversione di 2 valori.
Ciao Uwe
Logged

Offline Offline
Sr. Member
****
Karma: 7
Posts: 293
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

io farei cosi allora

Code:

byte CheckSum(byte arr[], int dim_array){
   byte total = 0;
  
   for(int i=0; i<dim_array; i++)
            total = (total + arr[i]);

   if(total>256) //100h = 256;
      total = total % 256;

   return total
}

il total è rimasto dichiarato byte... non supera mai il 256... sommando fa overflow...
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 5
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

La somma non é un modo buono di fare un checksum. Non si possono rivelare una inversione di 2 valori.
Ciao Uwe

Grazie a tutti ,
Uwe, perfettamente d'accordo, ma devo comunicare con una scheda che utilizza questo metodo.
Mauro
Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 234
Posts: 20208
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

capisco. Molto ingegnosa quella scheda. smiley-mr-green smiley-mr-green smiley-mr-green
Ciao Uwe
Logged

Pages: [1]   Go Up
Jump to: