Conversion Caractères en hexadécimale

Fermé
MegaRadio Messages postés 4 Date d'inscription mardi 22 mai 2018 Statut Membre Dernière intervention 24 mai 2018 - Modifié le 22 mai 2018 à 20:41
Whismeril Messages postés 19021 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 16 avril 2024 - 26 mai 2018 à 13:39
Bonjours à tous,

je but depuis quelque temps sur un problème de conversion : je souhaite saisir 3 caractères hexa par une texbox, et ensuite fabriquer une adresse sur deux octets (msb,lsb).
le contrôle de saisie des caractères hexa fonctionne,(If IsNumeric("&H" & Text1.Text)), le but est mettre les deux caractères de droite dans l'octet de poids faible (LSB) et le caractère de gauche dans l' octet de poids fort(msb).
en finale le format sera au maximum de 'FFF', donc 2 octets.
Exemple en binaire : FFF = 00001111 11111111 - 1FF = 00010000 11111111 - 00F = 00000000 00001111.
j'ai pris ces exemples pour ne pas qu'il y est de confusion dans les différents codes.
Ce programme est destiné à lire et écrire dans les paramètres de pic (16F690).
Pour la partie paramètres, je n'ai pas eu de difficulté parce que les adresses ne sont pas saisies mais écrites sous forme : &h01 & &hFF, le tout est transmis par une liaison série.

je vous mets le programme d'essai en cours (c'est un peu le fouillis)

Merci d'avance de vous pencher sur ce petit problème ( petite précision, je suis un débutant de 71 ans)

  Private Sub Text1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Text1.TextChanged

        Dim Variable_ASCII As String
        Dim Pnt_Hexa As Byte
        Dim Hexa_Code As Byte
        'Dim Tab_Hexa() As Byte = {"0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F"}
        'Dim Tab_Hexa() As Byte = {"&H0,&H1,&H2,&H3,&H4,&H5,&H6,&H7,&H8,&H9,&HA,&HB,&HC,&HD,&HE,&HF"}
        'Saisie 3 caractères Hexa.

    dim (Number As Byte) As String

        If IsNumeric("&H" & Text1.Text) Then ' Vérifie si Caractère Hexa Ok.
            TextBox4.Text = Text1.Text
            Variable_ASCII = TextBox4.Text.Substring(Num_Car, 1) 'Saisie le caractère courant OK.
            Num_Car = Num_Car + 1
            If AscW(Variable_ASCII) >= 65 Then ' Fabrique un pointeur pour le tableau hexa.
                Pnt_Hexa = AscW(Variable_ASCII) - 54 ' si lettre.
            Else
                Pnt_Hexa = AscW(Variable_ASCII) - 48 ' Si chiffre.
            End If
            Hexa_Code = Convert.ToByte(TextBox4.Text)
            'Hexa_Code = (Tab_Hexa, 0, 2)
        End If
    End Sub


EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.
A voir également:

2 réponses

Whismeril Messages postés 19021 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 16 avril 2024 928
22 mai 2018 à 19:51
Bonsoir

je ne suis pas sûr d'avoir compris
			Dim hexa As String = "ABC"
			Dim debut As String = hexa.Substring(0, 1)
			Dim fin As String = hexa.Substring(1)

			Dim poidsFort As String = Convert.ToString(Integer.Parse(debut, System.Globalization.NumberStyles.HexNumber), 2)
			Dim poidsFaible As String = Convert.ToString(Integer.Parse(fin, System.Globalization.NumberStyles


Sinon, on a tous débuté un jour.
Ce qui est judicieux c'est de commencer par les bases, ce cours est bien
https://plasserre.developpez.com/cours/vb-net/

D'autre part, tu mélanges VB6 et VB.Net, c'est déconseillé, voir ce petit article
https://codes-sources.commentcamarche.net/faq/11151-pourquoi-mon-code-vb6-vba-ne-marche-pas-en-vb-net
0
MegaRadio Messages postés 4 Date d'inscription mardi 22 mai 2018 Statut Membre Dernière intervention 24 mai 2018
23 mai 2018 à 21:20
Grand Merci de vous pencher sur mon problème, dans votre exemple la saisie des caractères est bonne car dans le "debut" il y a "A" et dans fin "BC", mais après dans la variable "poidsFort", on visualise du binaire 1010 Correspondant à "A", et pour les poidsFaible, il y a "188" qui correspond a "BC" en décimale.

Dans l'adresse que je dois transmettre, l'octet poids fort (dans l'exemple "ABC") aura pour valeur : Décimale 10 - Hexa 0A - Binaire 00001010, et pour les poids faibles : Décimale 188 - Hexa BC - Binaire 1011 1100.
Comme je l'indiquais, je n'ai pas eu de problème avec les adresses écrites dans le programme style : &h04 & &hFF.
ci-dessous, une partie du prg qui fonctionne bien, dans lequel on voit la déclaration et le chargement de MSB et LSB en hexa.

Voila pour l'instant les précisions que je peux vous apporter (J'utilise Visual Basic express 2010).

Public Addr_Bin_Msb As Byte
Public Addr_Bin_Lsb As Byte
Public Val_Bin As Byte

Addr_Bin_Msb = &H11 ' Charge l'adresse MSB.
Addr_Bin_Lsb = &HA ' Charge l'adresse LSB.

Sub TRANSCOM() ' Ecriture Port Serie COM1

' Reading Bank 2 octets pour l'adresse à lire.

If Writ_Read = "Reading" Then ' Transfert de deux octets
Dim data_Trans As Byte() = {&H3, Addr_Bin_Msb, Addr_Bin_Lsb} ' Nombre de byte et Assemblage des deux bytes.
SerialPort1.Write(data_Trans, 0, 3) ' Transmet le tabeau.
End If

' Writing Bank

If Writ_Read = "Writing" Then ' Transfert de trois octets, deux octets pour l'adresse et un pour la valeur paramètre.

Dim data_Trans As Byte() = {&H4, Addr_Bin_Msb, Addr_Bin_Lsb, Val_Bin} ' Assemble les trois.
SerialPort1.Write(data_Trans, 0, 4) ' Transmet le tabeau.
Call CONVERTION(Val_Bin) ' Sub Routine Conversion pour affichage
Call CONVERTION_DISPLAY() ' en décimale, hexa, binaire
End If
End Sub
0
Whismeril Messages postés 19021 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 16 avril 2024 928
23 mai 2018 à 21:58
Bonsoir

à l'avenir, merci d'utiliser la coloration syntaxique.
Quand Baladur13 a corrigé ta question initiale, il a mis un gros encart bleu pour attirer ton attention sur ce point.
Au centre de cet encart, se trouve un lien vers le petit tuto.

Ça fait bien longtemps que je ne me fatigue plus à décrypter des codes non mis en forme, surtout que je vois trainer du VB6 et qu'en plus tu dis que ce code ne te pose pas de problème (alors pourquoi le lire?)



car dans le "debut" il y a "A" et dans fin "BC", mais après dans la variable "poidsFort", on visualise du binaire 1010 Correspondant à "A", et pour les poidsFaible, il y a "188" qui correspond a "BC" en décimale.
En effet, il semble que j'ai merdé mon copier coller.
Ces 2 lignes sont sensées faire la même chose donc devraient être identiques, aux variables près.
Dim poidsFort As String = Convert.ToString(Integer.Parse(debut, System.Globalization.NumberStyles.HexNumber), 2)
Dim poidsFaible As String = Convert.ToString(Integer.Parse(fin, System.Globalization.NumberStyles

Du coup, je pense que tu peux corriger toi même mon erreur de copier coller.
0
Bonsoir,

Oui, en effet, j'ai corrigé l'erreur après avoir envoyé le deuxième message.
J'ai bien essayé d'utiliser la coloration syntaxique, mais apparament ça n'a pas marché, j'essairais une autre fois.
Demain je verrais si je peux utiliser les variables poidsfort, poidsfaible, mais dans l'exemple du deuxième message, ce sont des bytes que je transmet.
Cordialement.
0
Whismeril Messages postés 19021 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 16 avril 2024 928
24 mai 2018 à 07:19
Alors pour des byte
Dim hexa As String = "ABC"
Dim debut As String = hexa.Substring(0, 1)
Dim fin As String = hexa.Substring(1)

Dim poidsFort As Byte = Convert.ToByte(Integer.Parse(debut, System.Globalization.NumberStyles.HexNumber))
Dim poidsFaible As Byte = Convert.ToByte(Integer.Parse(fin, System.Globalization.NumberStyles.HexNumber))
0
MegaRadio Messages postés 4 Date d'inscription mardi 22 mai 2018 Statut Membre Dernière intervention 24 mai 2018
24 mai 2018 à 20:55
Bonjour,

Excellent, ça fonctionne parfaitement, je vais intégrer les modifs dans le programme final.

Actuellement, lorsque je saisie les trois caractères avec la textbox, même si ceux-ci ne sont pas hexa ils sont affichés,
hors je pense qu'il est possible peut-êtres en utilisant "keycode" ou quelque chose comme ça, mais , mes connaissances ne sont pas suffisante.
Encore grand merci de m'avoir décoinsé
Pour la colorisation du programme, est-ce qu'elle peut se faire quand on mets le progamme dans la fenêtre ou lorsqu'on valide, parce que j'ai essayé et ça m'a pas marché.
Bien cordialement.
0
yg_be Messages postés 22692 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 avril 2024 1 471
22 mai 2018 à 19:53
bonsoir, moi je ferais ainsi, si je voulais vraiment saisir 3 caractères hexa par une texbox, et ensuite fabriquer une adresse sur deux octets (msb,lsb):
- convertir les trois caractères hexa en trois nombres (de 0 à 15): c1, c2, c3
-
Dim resultat As Integer
Dim c1 As Integer, c2 As Integer, c3 As Integer
resultat = ((c1 * 16) + c2) * 16 + c3
0
Whismeril Messages postés 19021 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 16 avril 2024 928
22 mai 2018 à 20:38
alors je n'ai pas du tout compris la même chose que toi....
0
MegaRadio Messages postés 4 Date d'inscription mardi 22 mai 2018 Statut Membre Dernière intervention 24 mai 2018
23 mai 2018 à 21:35
Désolé, je pense que cela ne correspond pas à ce que je souhaite, car au niveau du resultat, il faut que l'adresse soit sur deux octets pour êtres transmit par liaison série au "PIC".
J'ai mis un nouvel exemple de ce qui fonctionne bien dans le cas où les adresses sont dans le programme et non saisie par une textbox.
Encore merci de votre aide.
0