Le premier exemple que je vais mettre permet d'utiliser une structure contenant une variable (pas un pointeur) de type tableau de byte (octets).
Le tableau d'octet de la structure a 0 élément, il en résulte que un sizeof(nom_structure) retourne 0.
Ce n'est pas forcément le plus simple pour ton exemple car on peut utiliser un pointeur simple, au programme de faire évoluer l'adresse du pointeur (voir le deuxième exemple).
J'ai mis cet exemple car certaines structures Microsoft utilisent ce genre d'élément dans une structure, c'est à dire un élément tableau de taille 0.
Le compteur de boucle fait évoluer le pointeur en fonction de sa valeur, attention, la vraie valeur du pointeur ne change pas, elle est utilisée dans le calcul par le compilateur qui se charge de calculer la nouvelle valeur.
Code : Tout sélectionner
EnableExplicit
Define .i
Structure Buffer_Byte
val.byte[0]
EndStructure
;// affiche la taille de la structure, juste pour voir --> = 0
; Debug SizeOf(Buffer_Byte)
Global *var.Buffer_Byte ; permet de lire chaque valeur
Global compteur ; compteur de boucle
Global Fin_boucle ; permet de claculer la valeur à tester pour terminer le for
;// calcul de la fin de boucle
Fin_boucle = ?fin - ?debut - SizeOf(byte)
;// on assigne l'adresse du début des données au pointeur *var.Buffer_Byte
*var = ?debut
;// on démarre la boucle de lecture
Debug "boucle for"
Debug "------------"
For compteur = 0 To Fin_boucle
Debug Right(Hex(PeekB(*var\val[compteur])), 2) + " --> hexa"
Debug PeekA(*var\val[compteur]) ; + " --> décimal non signé"
Debug PeekB(*var\val[compteur]) ; + " --> décimal signé"
Debug ""
Next
;// autre boucle avec un while - wend
Debug "boucle while"
Debug "------------"
compteur = 0
While (?debut + compteur) < ?fin
Debug Right(Hex(PeekB(*var\val[compteur])), 2) + " --> hexa"
Debug PeekA(*var\val[compteur]) ; + " --> décimal non signé"
Debug PeekB(*var\val[compteur]) ; + " --> décimal signé"
Debug ""
compteur = compteur + 1
Wend
DataSection
debut:
Data.b $10, $00, $A5, $FF, $9A, 01
fin:
EndDataSection
voici un deuxième code un peu plus simple avec un pointeur sans structure
Code : Tout sélectionner
EnableExplicit
Define .i
Global *var.byte ; permet de lire chaque valeur
Global Fin_boucle ; permet de claculer la valeur à tester pour terminer le for
;// calcul de la fin de boucle
Fin_boucle = ?fin - SizeOf(byte)
;// on assigne l'adresse du début des données au pointeur *var
;// directement dans la boucle for, il sera incrémenté automatiquement de 1
;// on démarre la boucle de lecture
Debug "boucle for"
Debug "------------"
For *var = ?debut To Fin_boucle
Debug Right(Hex(*var\b), 2) + " --> hexa"
Next
Debug ""
;// autre boucle avec un while - wend
Debug "boucle while"
Debug "------------"
*var = ?debut
While *var < ?fin
Debug Right(Hex(*var\b), 2) + " --> hexa"
;// on incrémente le pointeur
*var + SizeOf(byte)
Wend
DataSection
debut:
Data.b $10, $00, $A5, $FF, $9A, 01
fin:
EndDataSection