Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CONVERSION D'UNE STRING EN HEXADÉCIMAL


Information sur la source

Catégorie :Trucs & Astuces Source .NET ( DotNet ) Classé sous : conversion, string, entier, hexadecimal Niveau : Débutant Date de création : 16/02/2006 Vu : 21 029

Note :
5,67 / 10 - par 3 personnes
5,67 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (11)
Ajouter un commentaire et/ou une note

Description

Conversion d'une chaîne de caractères hexa-décimaux en entier
 

Source

  • Dim hds As New System.Management.ManagementObject("win32_logicaldisk='c:'")
  • hds.Get() ' Récupère les informations du disque
  • Dim sn As String = hds.Properties("volumeserialnumber").Value 'Numéro de série dans sn
  • Dim nb As UInteger
  • Dim element As String 'Caractère lu dans la chaîne sn
  • For i = 0 To sn.Length - 1 'Lecture élément par élément
  • element = Mid(sn, sn.Length - i, 1)
  • Select Case element
  • Case 0
  • nb = nb
  • Case 1
  • nb += 1 * (Math.Pow(16, i))
  • Case 2
  • nb += 2 * (Math.Pow(16, i))
  • Case 3
  • nb += 3 * (Math.Pow(16, i))
  • Case 4
  • nb += 4 * (Math.Pow(16, i))
  • Case 5
  • nb += 5 * (Math.Pow(16, i))
  • Case 6
  • nb += 6 * (Math.Pow(16, i))
  • Case 7
  • nb += 7 * (Math.Pow(16, i))
  • Case 8
  • nb += 8 * (Math.Pow(16, i))
  • Case 9
  • nb += 9 * (Math.Pow(16, i))
  • Case "A"
  • nb += 10 * (Math.Pow(16, i))
  • Case "B"
  • nb += 11 * (Math.Pow(16, i))
  • Case "C"
  • nb += 12 * (Math.Pow(16, i))
  • Case "D"
  • nb += 13 * (Math.Pow(16, i))
  • Case "E"
  • nb += 14 * (Math.Pow(16, i))
  • Case "F"
  • nb += 15 * (Math.Pow(16, i))
  • End Select
  • Next
Dim hds As New System.Management.ManagementObject("win32_logicaldisk='c:'")
        hds.Get() ' Récupère les informations du disque
        Dim sn As String = hds.Properties("volumeserialnumber").Value 'Numéro de série dans sn
        Dim nb As UInteger
        Dim element As String 'Caractère lu dans la chaîne sn

        For i = 0 To sn.Length - 1 'Lecture élément par élément
            element = Mid(sn, sn.Length - i, 1)
            Select Case element
                Case 0
                    nb = nb
                Case 1
                    nb += 1 * (Math.Pow(16, i))
                Case 2
                    nb += 2 * (Math.Pow(16, i))
                Case 3
                    nb += 3 * (Math.Pow(16, i))
                Case 4
                    nb += 4 * (Math.Pow(16, i))
                Case 5
                    nb += 5 * (Math.Pow(16, i))
                Case 6
                    nb += 6 * (Math.Pow(16, i))
                Case 7
                    nb += 7 * (Math.Pow(16, i))
                Case 8
                    nb += 8 * (Math.Pow(16, i))
                Case 9
                    nb += 9 * (Math.Pow(16, i))
                Case "A"
                    nb += 10 * (Math.Pow(16, i))
                Case "B"
                    nb += 11 * (Math.Pow(16, i))
                Case "C"
                    nb += 12 * (Math.Pow(16, i))
                Case "D"
                    nb += 13 * (Math.Pow(16, i))
                Case "E"
                    nb += 14 * (Math.Pow(16, i))
                Case "F"
                    nb += 15 * (Math.Pow(16, i))

            End Select

        Next

Conclusion

Bon, il doit exister une manière bien plus propre de faire ceci mais je n'ai pas trouvé ! J'étais en train de plancher sur un système de code d'activation pour mon application quand je me suis retouvé devant le problème suivant : Je récupère le numéro de série du disque dur sous forme de string, afin de faire des opérations sur ce numéro, il me fallait le convertir en entier ! Le numéro est une suite de caractères hexa-décimaux mais dans une string. Les quelques lignes suivantes créent donc un entier en lisant chaque caractère (hexa) de la chaîne de caractères ! Le math.pow signifie 16 élevé à la puissance i. En effet, par exemple : 5A en hexa-décimal vaut 90 en décimal : A=10 et 5=5 donc, pour convertir vers le décimal on fait = 10*(16^0)+5*(16^1) = 10*1+5*16=90 !
 

Commentaires et avis

signaler à un administrateur
Commentaire de schtroumf le 16/02/2006 18:34:59

Oui en effet il y a plus simple :)
nb = Val("&H" & sn)

bonne prog

signaler à un administrateur
Commentaire de TOTOCHITO le 17/02/2006 08:50:35

c'est bien beau mais a quoi ça sert

signaler à un administrateur
Commentaire de babboss le 17/02/2006 13:16:17

Moi c'est la recuperation du serial du disque dure qui m'interesse surtout :P
Donc merci a toi ;)

signaler à un administrateur
Commentaire de euclectus le 17/02/2006 13:24:51

de 1, merci schtroumf pour cette diabolique fonction bien utile mais il doit y avoir un problème de taille, car avec des petits nombres ça marche mais ça marche pas avec des gros nombre (ici ça marche pas par exemple) mais merci quand même ! peut-être une idée sinon ?

de 2, baboss, n'oublie pas d'ajouter management dans les références, sinon ça marche vmt sans pb

signaler à un administrateur
Commentaire de schtroumf le 17/02/2006 17:28:55

Bon, pourtant j'avais testé sur le sn de mon disque dur et ça marchait sans problème...
Je t'ai donc fait une petite source modifiée mais là je crains qu'on ne puisse pas aller bien plus loin (problème de précision de vb).
J'ai testé cette fonction et elle donne un résultat exact jusqu'à au moins FFFFFFFFFFFFF (ce qui est déjà pas mal en soit).
Au delà ce ce chiffre je ne te garanti rien... vb fait quelques approximations qui donnent un résultat faux... suffit de faire le test avec FFFFFFFFFFFFFFF et tu as le bon résultat +1 !!! va comprendre comment vb gère les nombres longs...

        Dim nb As Long
        Dim i As Integer
        Dim hds As New System.Management.ManagementObject("win32_logicaldisk='c:'")
        hds.Get() ' Récupère les informations du disque
        Dim sn As String = hds.Properties("volumeserialnumber").Value 'Numéro de série dans sn
        nb = 0
        For i = 1 To sn.Length
            nb = nb + Val("&H" & Mid(sn, i, 1)) * Math.Pow(16, sn.Length - i)
        Next

signaler à un administrateur
Commentaire de babboss le 17/02/2006 18:08:24

Merci c'est cool ca va bien me servir ;)
Par contre en Option strict il fo metre:
Dim sn As String = hds.Properties("volumeserialnumber").Value.ToString()
et
nb = nb + CLng(Val("&H" & Mid(sn, i, 1)) * Math.Pow(16, sn.Length - i))

Et sinon j'ai une question comment connaisai vous le nom de tout les ManagementObject (win32_logicaldisk) et de toute leur Properties(volumeserialnumber) ?
Je suppose que l'on peut recupéré simplement plein d'info sur le PC avec ca

signaler à un administrateur
Commentaire de schtroumf le 17/02/2006 18:40:46

C'est vrai qu'avec CLng c'est un peu plus propre :)

Pour les infos sur les ManagementObject et bien d'autres, c'est dispo sur la msdn en ligne ( http://msdn.microsoft.com/vbasic/ ) mais là on sort un peu du sujet :)

signaler à un administrateur
Commentaire de babboss le 17/02/2006 21:59:09

merci pour l'url ;)

signaler à un administrateur
Commentaire de AVI17 le 19/02/2006 08:39:15

Pour connaître le ns tu peux utiliser l'api suivante

    '*** GetVolumeInformation - pour recueillir des infos concernenant un disque
    Public Declare Function GetVolumeInformation Lib "kernel32" Alias "GetVolumeInformationA" _
        (ByVal lpRootPathName As String, _
        ByVal lpVolumeNameBuffer As String, _
        ByVal nVolumeNameSize As Long, _
        lpVolumeSerialNumber As Long, _
        lpMaximumComponentLength As Long, _
        lpFileSystemFlags As Long, _
        ByVal lpFileSystemNameBuffer As String, _
        ByVal nFileSystemNameSize As Long) As Long

        'lpRootPathName             racine du disque
        'lpVolumeNameBuffer         nom du disque, une variable string doit être initialisée
        '                           VolName = String$(255, Chr$(0)) avant l'appel si l'on veut
        '                           l'info
        'nVolumeNameSize            taille du nom de volume, 255 par défaut
        'lpVolumeSerialNumber       n° de série du disque
        'lpMaximumComponentLength   taille maxi d'un secteur, 0 par défaut
        'lpFileSystemFlags          0 par défaut
        'lpFileSystemNameBuffer     système de fichiers (NTFS ou autre), une variable string
        '                           doit être initialisée FSysName = String$(255, Chr$(0))
        '                           avant l'appel si l'on veut l'info
        'nFileSystemNameSize        255 par défaut
    
        'ex d'utilisation pour recueillir le n° de volume du disque c"
        
        GetVolumeInformation "C:\", VolName, 255, NumVolume, 0, 0, FSysName, 255


sinon tu peux aussi utiliser le filesystemobjet

signaler à un administrateur
Commentaire de OneHacker le 18/11/2006 20:35:50

Sans vouloir vous brusquer, il y a ça aussi :

dim strNombreDecimal = "53"

dim Result = Convert.ToString(CInt(strNombreDecimal), 16)

Msgbox(Result)

signaler à un administrateur
Commentaire de romain145 le 09/04/2007 20:59:29

merci à vous, en particulier à euclectus et à schtroumf pour ces bouts de code bien pratiques.

Voilà, quand je sais pas comment faire, que je cherche un peu et que je trouve, bah je suis bien content et je le fais savoir ;-) !

Pour ceux que mon calcul intéresserait :
temp = CByte(Val("&H" & line(0)) * 16 + Val("&H" & line(1)))
ceci calcule la valeur de l'octet (indiqué en hexa) dans la ligne de caractère.

Merci et @+
Romain

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

comment mettre la valeur contenue dans une variable string dans une variable de type entier [ par totoro ] je travaille sur un fichier texte dans lequel il faut que je recupere des informations afin de les stocker dans un base de données sous Access.pour pa comment mettre la valeur contenue dans une variable string dans une variable de type entier [ par totoro ] je travaille sur un fichier texte dans lequel il faut que je recupere des informations afin de les stocker dans un base de données sous Access.pour pa comment mettre la valeur contenue dans une variable string dans une variable de type entier [ par totoro ] je travaille sur un fichier texte dans lequel il faut que je recupere des informations afin de les stocker dans un base de données sous Access.pour pa conversion de caractere en entier [ par LallThis ] a partir un caractere numérique, comme "0", "1" ou "2", le convertir en un nombreComment faire?LallThis Conversion d'un nombre entier en une chaine de caractère [ par Janot ] Ben, je n'arrive pas à trouver la fonction qui convertit un nombre entier en une chaine de caractères (je connaîs seulement Val qui fait l'inverse).Me Conversion de integer vers string [ par louak ] Bonjour tout le monde,je voudrais faire une fonction qui convertit des nombres (integer) en string :Private Function Convert(i as integer) as string Conversion chaine de caracteres en un nombre entier [ par tntdavid ] Je voudrais connaitre le code VB d'une fonction qui me permettrait de convertir une chaine de 6 caractères en un nombre entier.Merci d'avance de l'att conversion de caracteres dans une string (help please) [ par andrea ] Bonjour,je voudrais savoir comment faire pour changer (remplacer) des caracteres dans une string par exemple lorsque je trouve un quote (') dans une Conversion d'une variable string en tableau de char... [ par PeTeRs ] Vi vi, c encore moi...Je vais m'exprimer clairement : dim rst as recordsetdim var as stringvar = rst.fields("email")'donc là on est bien d'accord, la conversion string en single [ par papaye21 ] j'ai fait une textbox et je récupère donc un string (mais en fait c'est des chiffres que j'ai dedans)ça marche bien qd je récupère des entiers mais pa


Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,437 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.