[R] Convertion d'un nombre 64 bit en hexadecimal

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
kalixe
Niveau 3
Niveau 3
Messages : 40
Enregistré le : mer. 02 déc. 2009 12:06
Status : Hors ligne

[R] Convertion d'un nombre 64 bit en hexadecimal

#1

Message par kalixe »

Bonjour,

la fonction hex() permet de convertir uniquement les nombres de 32 bit, avez vous une méthode pour convertir un nombre de 64 bits en hexa ?

Par avance, merci
Modifié en dernier par kalixe le dim. 17 oct. 2010 21:48, modifié 1 fois.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Convertion d'un nombre 64 bit en hexadecimal

#2

Message par Tlem »

Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
kalixe
Niveau 3
Niveau 3
Messages : 40
Enregistré le : mer. 02 déc. 2009 12:06
Status : Hors ligne

Re: [..] Convertion d'un nombre 64 bit en hexadecimal

#3

Message par kalixe »

Heu non tlem :s

je ne souhaite pas faire de l'encodae en base64, je souhaite convertir un nombre entier décimal en hexadecimal, comme lorsque tu prends ta calculatrice en affichage programmeur et tu peux convertir d'un clique n'importe quel nombre, vu que la focntion Hex() ne peut remplir se rôle il doit y avoir une autre méthode ?
ragnoff
Niveau 3
Niveau 3
Messages : 34
Enregistré le : ven. 24 juil. 2009 17:11
Status : Hors ligne

Re: [..] Convertion d'un nombre 64 bit en hexadecimal

#4

Message par ragnoff »

Bonjour

Si j ai bien suivi, tu as un grand nombre décimal a transformer en hexa ...

je te donne ceci, petit code perso, qui date un peu, a regarder avant d'éxécuter donc ..

Code : Tout sélectionner

[spoiler=]
#Include <string.au3>


func Base16($n)
    Switch $n
        Case 0 to 9
            $retour = String($n)
        Case 10
            $retour = "a"
        Case 11
            $retour = "b"
        Case 12
            $retour = "c"
        Case 13
            $retour = "d"
        Case 14
            $retour = "e"
        Case 15
            $retour = "f"
    EndSwitch
    Return $retour
EndFunc

Func Longeur($n)
    Return 1 + Floor(log($n)/log(16))
EndFunc

Func Decto16($m)
    $n = $m
    $Longueur = Longeur($n)
    $16 = ""

    $Longueur = $Longueur - 1
    $p = floor($m / ( 16 ^ $Longueur ))
    $pstring = Base16($p)
    $16 = $pstring
    $m = $m - ( $p * (16 ^ $Longueur))
    $i = 0
    while $Longueur > 0
        $Longueur = $Longueur - 1
        $i = $i + 1
        $p = floor($m / ( 16 ^ $Longueur ))
        $pstring = Base16($p)
        $16 = _StringInsert($16,$pstring,$i)
        $m = $m - ( $p * (16 ^ $Longueur))

    WEnd
    Return $16
EndFunc
[/spoiler]
 
c'est surement pas le code le plus performant pour un changement de base, notamment du au sens d'écriture en base 16 ( droite a gauche, ou gauche a droite ), mais ça devrait faire l affaire ...
kalixe
Niveau 3
Niveau 3
Messages : 40
Enregistré le : mer. 02 déc. 2009 12:06
Status : Hors ligne

Re: [..] Convertion d'un nombre 64 bit en hexadecimal

#5

Message par kalixe »

Merci mais ca ne donne pas le bon résultat et lorsque c'est un entier négatif il ne sait pas le traiter, il me renvoi rien :(
ragnoff
Niveau 3
Niveau 3
Messages : 34
Enregistré le : ven. 24 juil. 2009 17:11
Status : Hors ligne

Re: [..] Convertion d'un nombre 64 bit en hexadecimal

#6

Message par ragnoff »

Il ne donne pas le bon résultat ... Exact, si tu passes les limites de stockage de autoit en matière de nombre entier. Dans ce cas la, faut que tu changes de manière de stocker les nombres. Un exemple de ce que tu met en entré sera surement un plus pour t'aider ... Quand aux nombres négatifs, effectivement, il ne sait pas les traiter ... a toi d'adapter ;)
kalixe
Niveau 3
Niveau 3
Messages : 40
Enregistré le : mer. 02 déc. 2009 12:06
Status : Hors ligne

Re: [R] Convertion d'un nombre 64 bit en hexadecimal

#7

Message par kalixe »

C'est bon j'ai fini par trouver (avec bcp de temps) :

Convertion de du decimal à l'hexa et de l'hexa au decimal

Code : Tout sélectionner

Global $tHEX_64 = DllStructCreate('int64')
Global $tHEX_32 = DllStructCreate('int;int', DllStructGetPtr($tHEX_64))
Global $tHEX_00 = DllStructCreate('byte[8]', DllStructGetPtr($tHEX_64))

Func Dec2Hex($nVal) ;; ! output: Full 8 Byte Hex-string without leading '0x'.
    If Not IsNumber($nVal) Then Return SetError(1, 0, '')
    ;; If IsFloat($nVal) Then Return '80000000' ;; == Hex() behavior.
    ;; If IsFloat($nVal) Then $nVal = Floor($nVal) ;; == Current default behavior.
    ;
    DllStructSetData($tHEX_64, 1, $nVal)
    Return Hex(DllStructGetData($tHEX_32, 2)) & Hex(DllStructGetData($tHEX_32, 1))
EndFunc

Func Hex2Dec($sHex) ;; ! Input: Full 8 Byte Hex-string without leading '0x'.
    If Not IsString($sHex) Then Return SetError(1, 0, '')
    If StringLen($sHex) <> 16 Then Return SetError(2, 0, '')
    If StringRegExp($sHex, '(?i)[^\dABCDEF]') Then Return SetError(3, 0, '')
    ;
    DllStructSetData($tHEX_00, 1, Binary('0x' & $sHex))
    $sHex = Hex(DllStructGetData($tHEX_32, 2)) & Hex(DllStructGetData($tHEX_32, 1))
    DllStructSetData($tHEX_00, 1, Binary('0x' & $sHex))
    Return DllStructGetData($tHEX_64, 1)
EndFunc
 
Répondre