IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

[VB.NET] Comment effectuer le Checksum de Bytes ?


Sujet :

VB.NET

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5
    Points : 5
    Points
    5
    Par défaut [VB.NET] Comment effectuer le Checksum de Bytes ?
    Bonjour à tous,

    Comment dois-je faire pour calculer le "checksum" de tout ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    Dim InitCmnd(39) As Byte
    InitCmnd(0) = &HFF
    InitCmnd(1) = &H89
    InitCmnd(2) = &H7
    InitCmnd(3) = &H0
    InitCmnd(4) = &H45
    InitCmnd(5) = &H4
    InitCmnd(6) = &H32
    InitCmnd(7) = &H43
    InitCmnd(8) = &H30
    InitCmnd(9) = &H30
    InitCmnd(10) = &H31
    InitCmnd(11) = &H53
    InitCmnd(12) = &H48
    InitCmnd(13) = &H54
    InitCmnd(14) = &H30
    InitCmnd(15) = &H30
    InitCmnd(16) = &H31
    InitCmnd(17) = &H54
    InitCmnd(18) = &H4B
    InitCmnd(19) = &H30
    InitCmnd(20) = &H30
    InitCmnd(21) = &H31
    InitCmnd(22) = &H5F
    InitCmnd(23) = &H0
    InitCmnd(24) = &H0
    InitCmnd(25) = &H0
    InitCmnd(26) = &H0
    InitCmnd(27) = &H0
    InitCmnd(28) = &H0
    InitCmnd(29) = &H0
    InitCmnd(30) = &H0
    InitCmnd(31) = &H0
    InitCmnd(32) = &H0
    InitCmnd(33) = &H0
    InitCmnd(34) = &H0
    InitCmnd(35) = &H0
    InitCmnd(36) = &H0
    InitCmnd(37) = &H0
     
    InitCmnd(38) = // ? <--CHECKSUM ?
     
    PortCom.Output = InitCmnd
    Merci pour votre aide!

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    487
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 487
    Points : 621
    Points
    621
    Par défaut
    Le checksum doit être une simple somme de tous les Byte du tableau.
    L''addition donne normalement un integer à convertir en Byte.
    On ne peut pas faire boire un âne qui n'a pas soif.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Bon, j'ai quand même réussi a obtenir le résultat voulu,
    mais, vous constaterez que je n'ai vraiment pas beaucoup
    d'expérience en programmation. Quelqu'un peut-il m'aider a abréger
    mon code ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
     
    InitPortCom(PortCom)
     
    Dim scnum1Hex As String
    Dim scnum1 As String
    Dim scnum2Hex As String
    Dim scnum2 As String
    Dim scnum3Hex As String
    Dim scnum3 As String
     
    Dim shtnum1Hex As String
    Dim shtnum1 As String
    Dim shtnum2Hex As String
    Dim shtnum2 As String
    Dim shtnum3Hex As String
    Dim shtnum3 As String
     
    scnum1 = Hex(Asc(SCtxtBox1.Text))
    scnum1Hex = "&h" & scnum1
    scnum2 = Hex(Asc(SCtxtBox2.Text))
    scnum2Hex = "&h" & scnum2
    scnum3 = Hex(Asc(SCtxtBox3.Text))
    scnum3Hex = "&h" & scnum3
     
    shtnum1 = Hex(Asc(SHTTextBox1.Text))
    shtnum1Hex = "&h" & shtnum1
    shtnum2 = Hex(Asc(SHTTextBox2.Text))
    shtnum2Hex = "&h" & shtnum2
    shtnum3 = Hex(Asc(SHTTextBox3.Text))
    shtnum3Hex = "&h" & shtnum3
     
    'Envoi de données sur le port com
    Dim InitCmnd(39) As Byte
     
    ' Envoi Titre SC001SHT001TK001
    InitCmnd(0) = &HFF
    InitCmnd(1) = &H89
    InitCmnd(2) = &H7
    InitCmnd(3) = &H0
    InitCmnd(4) = &H45
    InitCmnd(5) = &H4
    InitCmnd(6) = &H53
    InitCmnd(7) = &H43
    InitCmnd(8) = scnum1Hex
    InitCmnd(9) = scnum2Hex
    InitCmnd(10) = scnum3Hex
    InitCmnd(11) = &H53
    InitCmnd(12) = &H48
    InitCmnd(13) = &H54
    InitCmnd(14) = shtnum1Hex
    InitCmnd(15) = shtnum2Hex
    InitCmnd(16) = shtnum3Hex
    InitCmnd(17) = &H54
    InitCmnd(18) = &H4B
    InitCmnd(19) = &H30
    InitCmnd(20) = &H30
    InitCmnd(21) = &H31
    InitCmnd(22) = &H5F
    InitCmnd(23) = &H0
    InitCmnd(24) = &H0
    InitCmnd(25) = &H0
    InitCmnd(26) = &H0
    InitCmnd(27) = &H0
    InitCmnd(28) = &H0
    InitCmnd(29) = &H0
    InitCmnd(30) = &H0
    InitCmnd(31) = &H0
    InitCmnd(32) = &H0
    InitCmnd(33) = &H0
    InitCmnd(34) = &H0
    InitCmnd(35) = &H0
    InitCmnd(36) = &H0
    InitCmnd(37) = &H0
     
    Dim a As Integer
    Dim b As Integer
    Dim c As Integer
    Dim d As Integer
    Dim dd As Integer
    Dim f As Integer
    Dim g As Integer
    Dim h As Integer
    Dim i As Integer
    Dim j As Integer
    Dim k As Integer
    Dim l As Integer
    Dim m As Integer
    Dim n As Integer
    Dim o As Integer
    Dim p As Integer
    Dim q As Integer
    Dim r As Integer
    Dim s As Integer
    Dim t As Integer
    Dim v As Integer
    Dim w As Integer
    Dim x As Integer
    Dim y As Integer
     
    a = InitCmnd(0)
    b = InitCmnd(1)
    c = InitCmnd(2)
    d = InitCmnd(3)
    dd = InitCmnd(4)
    f = InitCmnd(5)
    g = InitCmnd(6)
    h = InitCmnd(7)
    i = InitCmnd(8)
    j = InitCmnd(9)
    k = InitCmnd(10)
    l = InitCmnd(11)
    m = InitCmnd(12)
    n = InitCmnd(13)
    o = InitCmnd(14)
    p = InitCmnd(15)
    q = InitCmnd(16)
    r = InitCmnd(17)
    s = InitCmnd(18)
    t = InitCmnd(19)
    v = InitCmnd(20)
    w = InitCmnd(21)
    x = InitCmnd(22)
    y = InitCmnd(23)
     
    TextBox1.Text = "&h" & Hex(a + b + c + d + dd + f + g + h + i + j + k + l + m + n + o + p + q + r + s + t + v + w + x + y)
    TextBox2.Text = "&H" & Microsoft.VisualBasic.Right(TextBox1.Text, 2)
    InitCmnd(38) = TextBox2.Text
     
    PortCom.Output = InitCmnd

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    487
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 487
    Points : 621
    Points
    621
    Par défaut
    Quand on a un traitement répétitif comme ces 38 additions, il faut utiliser
    une boucle FOR .
    Le problème est un dépassement de capacité si on fait l'addition dans un
    Byte.
    Il faut donc un Int pour contenir le résultat.
    La somme est ensuite tronquée en Byte pour constituer le checksum.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Dim index As Integer
    Dim somme As Integer
    somme = 0
    For index = 0 to 37
       somme += InitCmnd(index)
    Next 
    InitCmnd(38) = somme
    la dernière ligne nécessite peut être un cast mais je ne connais pas la
    syntaxe VB.
    On ne peut pas faire boire un âne qui n'a pas soif.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Merci!! Ca fonctionne!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    'CheckSum
    Dim index As Integer
    Dim somme As Integer
    somme = 0
    For index = 0 To 37
       somme += InitCmnd(index)
    Next
    InitCmnd(38) = "&H" & Microsoft.VisualBasic.Right(Hex(somme), 2)
    ' Fin CheckSum

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VB.Net]Comment effectuer l'Authentification LDAP ?
    Par le Daoud dans le forum VB.NET
    Réponses: 6
    Dernier message: 28/02/2006, 10h09
  2. [VB.Net 2.0] Comment effectuer le transfert FTP ?
    Par MattC dans le forum VB.NET
    Réponses: 1
    Dernier message: 27/02/2006, 11h35
  3. Réponses: 9
    Dernier message: 13/02/2006, 08h39
  4. [ADO.Net][VB.NET][DataAdapter] Comment effectuer l'Update ?
    Par Anubis666 dans le forum Accès aux données
    Réponses: 14
    Dernier message: 19/01/2006, 15h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo