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
883