Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Texte DecHex et HexDec étendus

sylvanu

XLDnaute Barbatruc
Supporter XLD
Confronté dans un post à un HexDec dont la chaine dépassait les limites de 10 caractères, j'ai écrit cette fonction qui n'est plus limitée.
Et tant qu'à faire sa petite sœur DecHex.

VB:
Function HexDecExt(N)
    Dim P#: N = "000" & CStr(N)                 ' Pour être sur que la longueur de N soit toujours >=4, et transforme en chaine de caractères.
    While Len(N) >= 4                           ' Pour chaque bloc de 4 caractères
        HexDecExt = HexDecExt + (65536 ^ P) * Application.Hex2Dec(Right$(N, 4)) ' On calcule en entier cette valeur
        P = P + 1: N = Mid(N, 1, Len(N) - 4)    ' On incrémente la puissance et on décale la chaine de 4 caractère.
    Wend
End Function

Code:
Function DecHexExt(N)
    Dim I%, P#
    For I = 255 To 0 Step -1
        P = 2 ^ (4 * I): Car = Int(N / P)       ' On calcule la valeur le caractère à afficher : Car
        N = N - (P * Int(N / P))                ' Nouvelle valeur de N
        If Car > 0 And D = 0 Then D = I         ' Calcul nombre digits à 0 en début
        DecHexExt = CStr(DecHexExt & Application.Dec2Hex(Car)) ' On construit la chaine.
    Next I
        DecHexExt = Right$(DecHexExt, D + 1)    ' Supprime les 0 superflus
End Function

Pas de limites, si ce n'est celle d' XL. (10^308 ) avec 15 chiffres significatifs.

Attention cependant. Comme XL est limité à 15 chiffres significatifs, au delà il mettra des 0.
La limite est donc 999 999 999 999 999 ( 10^15-1 ), cela fait en hexa 3 8D7E A4C6 7FFF,
mais si on rajoute un digit : 9 999 999 999 999 999 alors XL le traduira par 9 999 999 999 999 990 et cela donnera 23 86F2 6FC0 FFF6 au lieu de 23 86F2 6FC0 FFFF.
 

Discussions similaires

Réponses
8
Affichages
667
Réponses
19
Affichages
2 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…