none
comment lire nombre de hexadecimale RRS feed

  • Discussion générale

  • Bonjour,

    Voici un exemple en image :

    Voici mon code :

    Try
                Dim fs As New FileStream(FilePath, IO.FileMode.Open, IO.FileAccess.ReadWrite, IO.FileShare.ReadWrite)
                Dim reader As New BinaryReader(fs)
                reader.BaseStream.Position = &H85F4
                Do
                    Dim valeur As String = BitConverter.ToString(reader.ReadBytes(4), 0, 4).Replace("-", "").Length - 7
                    If valeur = "7FFFFFFF7FFFFFFF" Then Exit Do
                    reader.BaseStream.Position += 4
                    Label2.Text = valeur
                Loop
                fs.Close()
                reader.Close()
            Catch exception1 As Exception
                ProjectData.SetProjectError(exception1)
                Dim exception As Exception = exception1
                Interaction.MsgBox(Conversion.ErrorToString, MsgBoxStyle.ApplicationModal, Nothing)
                ProjectData.ClearProjectError()
            End Try

    il m'affiche un message quand je lie mon fichier :

    je voudrais savoir comment compter de nombre hexadécimale dans mon fichier(voir premier image)?

    Cordialement,

    jeudi 3 décembre 2015 06:15

Toutes les réponses

  • Bonjour,

    Je ne suis pas sûr du but de l'objectif de ce code (a priori parcourir en fichier sur l'hexa et s'arrêter lorsqu'on trouve une certaine chaine.

    Votre problème vient tout simplement du fait que vous essayer de lire au-delà de la taille du fichier, il suffit simplement de faire un test lors du Loop pour ne pas boucler le cas échéant. Je tiens à vous préciser que votre code n'est pas bullet proof puisque vous pointez directement à une position qui n'existera pas si le fichier est petit. Ensuite vous soustrayez la valeur de 7 à la taille du BitConverter... comme vous lisez 4 octets, qu'un octet se code sur 2 chiffres hexa, vous soustrayez toujours 7 à 8 (4x2) donc obtenez systématiquement 1.

    Ensuite vous comparez à la chaine "7FFFFFFF7FFFFFFF"... Il faudrait lire 8 octets... A moins que vous ne vouliez mettre "7FFFFFFF"... Je suis parti de cette dernière option et ai modifié votre code.

            Try
                Dim fs As New FileStream(FilePath, IO.FileMode.Open, IO.FileAccess.ReadWrite, IO.FileShare.ReadWrite)
                Dim reader As New BinaryReader(fs)
                reader.BaseStream.Position = &H85F4
                Do
                    Dim valeur As String = BitConverter.ToString(reader.ReadBytes(4), 0, 4).Replace("-", "").Length - 7
                    If valeur = "7FFFFFFF" Then
                        Exit Do
                    End If
                    reader.BaseStream.Position += 4
                Loop While reader.BaseStream.Position + 4 <= reader.BaseStream.Length
                fs.Close()
                reader.Close()
            Catch exception1 As Exception
                ProjectData.SetProjectError(exception1)
                Dim exception As Exception = exception1
                Interaction.MsgBox(Conversion.ErrorToString, MsgBoxStyle.ApplicationModal, Nothing)
                ProjectData.ClearProjectError()
            End Try
    Bien cordialement,

    Fabrice JEAN-FRANCOIS, Novencia TS


    jeudi 3 décembre 2015 15:28
  • Bonjour  Fabrice Jean-Francois,

    Merci de votre réponse Mais le but c'est compter le nombre hexadécimale par rapport a premier image(voir photo).

    exemple: 06E00F = 1 ,04F429 = 2 , 04E30B = 3 .....etc et il s'arret quand il y a en hex (7FFFFFFF).

    Try
                Dim fs As New FileStream(FilePath, IO.FileMode.Open, IO.FileAccess.ReadWrite, IO.FileShare.ReadWrite)
                Dim reader As New BinaryReader(fs)
                reader.BaseStream.Position = &H85F4
                Do
                    Dim valeur As String = BitConverter.ToString(reader.ReadBytes(4), 0, 4).Replace("-", "")
                    If valeur = "0006E00A" Then
                        Exit Do
                    End If
                    reader.BaseStream.Position += 4
                Loop While reader.BaseStream.Position + 4 < reader.BaseStream.Length
                Label2.Text = reader.BaseStream.Length - 7
                fs.Close()
                reader.Close()
            Catch exception1 As Exception
                ProjectData.SetProjectError(exception1)
                Dim exception As Exception = exception1
                Interaction.MsgBox(Conversion.ErrorToString, MsgBoxStyle.ApplicationModal, Nothing)
                ProjectData.ClearProjectError()
            End Try

    j'ai essayer avec votre code , ça me donne 262137. Mais quand il arrive sur 0006E00A (voir code) ça devait me donner 2 mais ça me donne toujours 262137.

    Comment faire pour compter le nombre hexadécimale(voir exemple au dessus du code)?

    Merci de votre compréhension,


    • Modifié zorro591 jeudi 3 décembre 2015 16:05
    jeudi 3 décembre 2015 16:04