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

Windows Forms Discussion :

Trame Hexa et conversion de byte en double


Sujet :

Windows Forms

  1. #1
    Membre régulier Avatar de vtk37
    Inscrit en
    Avril 2009
    Messages
    159
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Avril 2009
    Messages : 159
    Points : 116
    Points
    116
    Par défaut Trame Hexa et conversion de byte en double
    Salut,

    je récupère des trame hexa sur le port série mais il n'y a que la fin de celle-ci qui m'intéresse. Le problème c'est que dans ces trames il y a des espace (ex:"03 00 02 A2 01 4A) donc pour récupère toute la trame je suis obligé de faire plusieurs fois la lecture du buffer:

    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
    Try
                    Dim TrameRequete() As Byte = {&H3, &H28, &H2}
                    SerialPort1.Write(TrameRequete, 0, 3)
                    SerialPort1.Read(buffer, 0, buffer.Length)
                    SerialPort1.Read(buffer, 0, buffer.Length)
                    SerialPort1.Read(buffer, 0, buffer.Length)
                    SerialPort1.Read(buffer, 0, buffer.Length)
                    SerialPort1.Read(buffer, 0, buffer.Length)
                    SerialPort1.Read(data1, 0, buffer.Length)
                    SerialPort1.Read(data2, 0, buffer.Length)
     
                    Dim s1 As String = Hex(data1(0))
                    Dim s2 As String = Hex(data2(0))
                    Dim s As String = s1 + s2
     
     
                Catch e As TimeoutException
                End Try
            End If
    ensuite je veux récupérer les 2 derniers octets de la trame (avec la trame de mon exemple je veux récupérer 01 4A)
    ensuite je voudrais que cette valeur soit convertie en double (donc 14A en hexa = 330 en décimale) mais j'ai essayé plusieurs solutions et j'arrive à rien à par avoir un string contenant la valeur hexa que je veux en décimale...

    Donc est-ce qu'il y un moyen pour reduire le nombre de ligne pour lire le buffer ?
    et comment obtenir ma donnée en décimale?

    PS: j'ai déjà fait la même chose mais en C++, si quelqu'un est tenté de traduire le code en VB.net je peux le mettre

  2. #2
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Donc est-ce qu'il y un moyen pour reduire le nombre de ligne pour lire le buffer ?
    Avec une boucle ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 0 To 5
        SerialPort1.Read(buffer, 0, buffer.Length)
    Next i
    et comment obtenir ma donnée en décimale?
    On effectuant une conversion en indiquant la base sur laquelle on travaille.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim i As Integer = Convert.ToInt32("014A", 16)

  3. #3
    Membre régulier Avatar de vtk37
    Inscrit en
    Avril 2009
    Messages
    159
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Avril 2009
    Messages : 159
    Points : 116
    Points
    116
    Par défaut
    Impec merci, j'avais même pas penser à la boucle for

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim TrameRequete() As Byte = {&H3, &H28, &H2}
                    SerialPort1.Write(TrameRequete, 0, 3)
                    For i = 0 To 4
                        SerialPort1.Read(buffer, 0, buffer.Length)
                    Next
     
                    SerialPort1.Read(data1, 0, buffer.Length)
                    SerialPort1.Read(data2, 0, buffer.Length)
                    Dim s1 As String = Hex(data1(0))
                    Dim s2 As String = Hex(data2(0))
                    Dim s As String = s1 + s2 
                    Consigne = Convert.ToInt32(s, 16) / 10

  4. #4
    Membre à l'essai
    Inscrit en
    Mai 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 10
    Points : 14
    Points
    14
    Par défaut
    Tu peux aussi utiliser la fonction "split" pour extraire les élements d'une chaine de caractère séparé par un caractère identique, dans ton cas l'espace.

    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
     
     
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim MyArray As String() ' un tableau 
            Dim vStr As String = "03 00 02 A2 01 4A"
            MyArray = vStr.Split(" ") 'on rempli le tableau 
     
            MsgBox(" le dernier est :" & (MyArray(5)))
            MsgBox(" l'avant dernier est :" & (MyArray(4)))
     
            MsgBox(" le dernier est aussi :" & (MyArray(MyArray.Length - 1)))
            MsgBox(" l'avant dernier est aussi:" & (MyArray(MyArray.Length - 2)))
     
     
        End Sub

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

Discussions similaires

  1. [Langage/Algorithme] Conversion hexa avec nombre de byte variables
    Par Pascale38 dans le forum C++Builder
    Réponses: 9
    Dernier message: 07/06/2011, 16h33
  2. Conversion d'un byte[] en double
    Par erkan37 dans le forum Général Java
    Réponses: 7
    Dernier message: 14/04/2008, 15h50
  3. Conversion Enum <-> byte
    Par Don ViP dans le forum Langage
    Réponses: 5
    Dernier message: 03/05/2006, 14h51
  4. [VB.NET] Conversion int-> bytes sur 4 octets
    Par SteelBox dans le forum Windows Forms
    Réponses: 11
    Dernier message: 09/01/2005, 22h08
  5. Conversion 8 octets en double
    Par Invité dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 09/08/2004, 16h49

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