Tu peux remplacer Val(Mid(A$,i,1) ) par un tableau pré-rempli
Code : Tout sélectionner
Dim vm(255)
vm(0) = -1
For i = 1 to 255
vm(i) = Val(Chr(i) )
Next
vm(?) -->> donne l'équivalent décimal d'un caractère hexadécimal codé en ASCII.
Code : Tout sélectionner
; exemple
Debug vm('f') ; affichera 15
; Exemple : "35a" (hexa)
Debug Hex(vm('3') << 8 | vm('5') << 4 | vm('a') )
; (affichera 35A)
Pour stocker dans un quad :
1) on fait de la place
2) on y "gare" sa nouvelle valeur de 4 bits (= 1 chiffre hexa)
Remarques :
□
"Chose" est une valeur ASCII entre 1 et 255.
2 méthodes pour la récupérer
1/2) Chose = Asc(Mid("DE9A", i, 1) )
2/2) Chose = PeekA(*Adresse): *Adresse + 2
□
nombre << exposant
Ceci fait de la place à droite du nombre, et écrase la gauche du nombre :
exemples factices (base inadéquate, base 10 au lieu de base 2) :
1998 << 1 = 9980
1998 << 2 = 9800
1998 << 3 = 8000
□
nombre >> exposant
Ceci fait de la place à gauche du nombre, et écrase la droite du nombre :
exemples factices (base inadéquate, base 10 au lieu de base 2) :
1998 >> 1 = 0199
1998 >> 2 = 0019
1998 >> 3 = 0001
□
Logiquement, 4 chiffres de décalage dans un nombre de 4 chiffres, ça écrase tout : il ne reste que des zéros.
□
De la théorie à la pratique,
1) le signe et la grandeur du nombre ne sont pas à oublier.
Dans les décalages à droite (a >> b), le bit de signe est étiré et duppliqué autant que le nombre subit de bits de décalage.
2) les exemples sont en base 10, tandis que la réalité est en base 2.
3) dans les exemples, les nombres ont 4 chiffres. Dans la réalité, les entiers binaires ont entre 32 bits en X86, et 64 bits en X64.
4) dans un entier, le bit de droite, c'est le bit numéro zéro, et c'est aussi le bit de parité (0= nombre pair, 1= nombre impair)
5) dans un entier, le bit de gauche, c'est le bit numéro 31 (X86) ou 63 (X64), et c'est aussi le bit de signe.