none
Conversion de trois caractères en hexa sur deux octets. RRS feed

  • Question

  • Bonjour à tous,

    je but sur un petit problème de conversion : je souhaite saisir trois caractères hexa (0-9/A-F), par une textbox, contrôler que ce sont bien des caractères hexa (ça fonctionne), récupérer la valeur ascii pour éventuellement fabriquer un pointeur de table hexa, (ça marche), mais après je suis perdu.

    Ci-dessous le code en l'état.

    L'application est destinée à lire et écrie dans les paramètres de pic, la partie lecture/écriture paramètres à adresse fixe fonctionne puisse que je n'ai pas à saisir ces adresses.

    Mais pour les adresses de "mémoire ram", il faut saisir l'adresse à laquelle on veut lire ou écrire, et s'est la que ça coince...

    L'adresse est transmise au pic sous forme de deux octets (msb,lsb)

    je dois préciser que je suis un débutant de... 71ans.

    Merci à tous de vous penchez sur ce petit problème.

    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 = {"&0,&1,&2,&3,&4,&5,&6,&7,&8,&9,&A,&B,&C,&D,&E,&F"}
            'Saisie 3 caractères Hexa.
            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 = (Tab_Hexa, 0, 2)
            End If
        End Sub

    dimanche 20 mai 2018 14:23

Réponses

  • Bonsoir MégaRadio,

    L'application est destinée à lire et écrie dans les paramètres de pic, la partie lecture/écriture paramètres à adresse fixe fonctionne puisse que je n'ai pas à saisir ces adresses.

    J'ai une autre solution pour lire et écrire hexadécimale

    lire hexa pour afficher dans textbox1 et textbox2 :

    Imports System.IO
    Imports Microsoft.VisualBasic.CompilerServices
    
    Public Class Form1
        Dim Filepath As String = My.Computer.FileSystem.SpecialDirectories.Desktop & "/resources.arsc"
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            Try
                Dim input As New FileStream(Filepath, FileMode.Open, FileAccess.Read, FileShare.Read)
                Dim reader As New BinaryReader(input)
                reader.BaseStream.Position = &H1DD2 'position du octels
                TextBox1.Text = reader.ReadChars(8) '=> lire texte 8 octels
                reader.BaseStream.Position = &H1DD2 'position du octels
                TextBox2.Text = BitConverter.ToString(reader.ReadBytes(8)).Replace("-", " ") '=> lire hexadecimale en 8 octels
                reader.Close()
                input.Close()
            Catch exception1 As Exception
                ProjectData.SetProjectError(exception1)
                Dim exception As Exception = exception1
                ProjectData.ClearProjectError()
            End Try
        End Sub
    End Class
    vous pouvez remplacer dans reader.ReadChars() et reader.ReadBytes() le nombre octels a lire.

    exemple : reader.ReadChars(2), reader.ReadChars(4) ....etc

    j’espère que j'ai bien répondu a votre problème,

    Cordialement,

    mardi 22 mai 2018 18:34

Toutes les réponses

  • Bonjour MégaRadio,

    la partie lecture/écriture paramètres à adresse fixe fonctionne puisse que je n'ai pas à saisir ces adresses.
    Mais pour les adresses de "mémoire ram", il faut saisir l'adresse à laquelle on veut lire ou écrire, et s'est la que ça coince...

    Dans le langage C#, il est possible de se servir des pointeurs (mot-clé : unsafe) pour obtenir l’adresse d’une variable mais dans Visual Basic.NET, il n’existe aucune méthode équivalente d’après ce thread.

    Cependant, les méthodes de la classe Marshal (WriteInt32 , AllocHGlobal etc.) pourraient vous être utiles, ainsi que les threads suivants :
    No need of unsafe in vb.net
    Allocating physical memory for Unsigned Integer in Visual Basic .NET?

    Cordialement,
    Dimitar

    lundi 21 mai 2018 13:52
    Modérateur
  • Bonsoir MégaRadio,

    L'application est destinée à lire et écrie dans les paramètres de pic, la partie lecture/écriture paramètres à adresse fixe fonctionne puisse que je n'ai pas à saisir ces adresses.

    J'ai une autre solution pour lire et écrire hexadécimale

    lire hexa pour afficher dans textbox1 et textbox2 :

    Imports System.IO
    Imports Microsoft.VisualBasic.CompilerServices
    
    Public Class Form1
        Dim Filepath As String = My.Computer.FileSystem.SpecialDirectories.Desktop & "/resources.arsc"
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            Try
                Dim input As New FileStream(Filepath, FileMode.Open, FileAccess.Read, FileShare.Read)
                Dim reader As New BinaryReader(input)
                reader.BaseStream.Position = &H1DD2 'position du octels
                TextBox1.Text = reader.ReadChars(8) '=> lire texte 8 octels
                reader.BaseStream.Position = &H1DD2 'position du octels
                TextBox2.Text = BitConverter.ToString(reader.ReadBytes(8)).Replace("-", " ") '=> lire hexadecimale en 8 octels
                reader.Close()
                input.Close()
            Catch exception1 As Exception
                ProjectData.SetProjectError(exception1)
                Dim exception As Exception = exception1
                ProjectData.ClearProjectError()
            End Try
        End Sub
    End Class
    vous pouvez remplacer dans reader.ReadChars() et reader.ReadBytes() le nombre octels a lire.

    exemple : reader.ReadChars(2), reader.ReadChars(4) ....etc

    j’espère que j'ai bien répondu a votre problème,

    Cordialement,

    mardi 22 mai 2018 18:34