Thibaut a écrit :
C'est à dire qu'il n'est pas possible d'accéder aux octets qui constituent un nombre aussi facilement qu'en C (nombre >> 8*n°_octet) ?
Ce n'est pas ça le vrai problème (
Asc(Mid(s,n,1)) suffit). Le problème est que ce que tu proposes nécessite de faire un
Asc(Mid(s,n,1)) sur chaque chiffre. Ce que je propose permet de faire par exemple un
CLng(Mid(s,9*n,9)), donc 9 chiffres à la fois. Même si tu prends des chiffres en base 256, ça me fait 3,7 fois moins de chiffres/groupes de chiffres à traîter que toi, donc c'est plus rapide (comme déjà dit, le
CLng est beaucoup plus rapide que tout ce qu'on peut coder en VB). Et puis il y a le type
Decimal (virgule fixe à 4 chiffres décimaux après la virgule et à grande rangée, rangée qui permet de travailler sur des groupes de jusqu'à 29 chiffres) qui permet à ma méthode de traîter encore plus de chiffres à la fois. Voilà le code que j'utilise dans
Tokens89 OCX, peut-être que ça te permettra de comprendre mieux:
Private Function StrAdd$(ByVal S1$, ByVal S2$)
Dim i&, S3$, S4$, S5$
If Len(S1) > Len(S2) Then
S2 = String(Len(S1) - Len(S2), "0") & S2
Else
S1 = String(Len(S2) - Len(S1), "0") & S1
End If
StrAdd = ""
Dec1 = CDec(0)
For i = Len(S1) To 1 Step -28
S3 = Right(S1, 28)
S4 = Right(S2, 28)
S5 = CDec(S3) + CDec(S4) + Dec1
If Len(S5) = 29 Then
Dec1 = CDec(1)
StrAdd = Mid(S5, 2) & StrAdd
Else
Dec1 = CDec(0)
If Len(S1) > 28 Then
StrAdd = String(28 - Len(S5), "0") & S5 & StrAdd
Else
StrAdd = S5 & StrAdd
End If
End If
If Len(S1) > 28 Then
S1 = Left(S1, Len(S1) - 28)
S2 = Left(S2, Len(S2) - 28)
End If
Next
If Dec1 <> CDec(0) Then StrAdd = Dec1 & StrAdd
End Function
(Ce code est en principe sous licence LGPL. Étant l'auteur, je me permets de ne pas inclure une copie de la licence pour des raisons de place, mais elle est disponible online
là.)