|
- Présentation
- Pourquoi utiliser le type Buffer ?
- Le type Buffer : Syntaxe et manipulations
- Déclarer une variable de type Buffer
- Déclarer et initialiser une variable de type Buffer
- Manipulations sur les variables de type Buffer
- Le type 'Buffer sur' : Syntaxe et manipulations avancées
- Déclarer une variable de type Buffer sur
- Manipulations des variables de type 'Buffer sur' (appelés buffers fixes)
Buffer (Type de variable)
Le type Buffer correspond à une zone mémoire binaire. Grâce à ce type, un code manipulant du binaire sera portable entre une application WINDEV standard et une application WINDEV Mobile. Sous WINDEV, une variable de type chaîne de caractères peut aussi bien contenir des caractères que des données binaires (une image par exemple). Sous WINDEV Mobile, si une variable de type chaîne de caractères contient des données binaires, ces données peuvent être erronées (conversion malencontreuse par exemple). Pour manipuler des données binaires, nous vous conseillons d'utiliser une variable de type Buffer. Le type Buffer ne gère pas de marqueur spécifique de fin et permet de stocker des 0 binaires. Deux types de variables sont disponibles : - Buffer : Ce type permet de manipuler une zone mémoire dont la taille est dynamique : elle s'adapte automatiquement au contenu du buffer.
- Buffer sur : Ce type permet de manipuler une zone mémoire dont la taille (en octets) est fixée à la compilation. Ce type est un type avancé permettant de réaliser certaines manipulations spécifiques en mémoire, d'utiliser certaines API Windows.
Remarque : Les variables de type Buffer sont encodés en base64 en JSON et en XML. Pourquoi utiliser le type Buffer ? Sous WINDEV, il est possible d'utiliser le code suivant pour manipuler des octets en binaire :
S est une chaîne = Caract(1) + Caract(0)
La zone mémoire correspondante est :
Ce même code exécuté en Ansi et en Unicode n'a pas le même comportement. Pour avoir un code identique en ANSI et en UNICODE, il est nécessaire de remplacer la chaîne par un buffer. Le code devient alors :
S est un Buffer S[[1]] = 1 S[[2]] = 0
Le type Buffer : Syntaxe et manipulations Déclarer une variable de type Buffer - <Nom de la variable> est un Buffer
OU- <Nom de la variable 1>, <Nom de la variable 2> sont des Buffers
Détail de la syntaxe | | <Nom de la variable> : | Nom de la variable à déclarer. |
Remarques : - Les mots-clés un, une et des ne sont pas obligatoires : ce sont des mots d'agrément.
- Par défaut, une variable de type Buffer est vide.
Déclarer et initialiser une variable de type Buffer Pour déclarer et initialiser une variable de type Buffer, il est possible d'utiliser la syntaxe suivante :
<Nom de la variable> est un Buffer = [<Valeur hexa 1>, <valeur hexa 2>, ..., <Valeur hexa N>]
Détail de la syntaxe | | <Nom de la variable> : | Nom de la variable à déclarer. | Valeur hexa | Valeur hexadécimale. |
Exemple :
b est un Buffer = [0x01, 0x02, 0x03]
Manipulations sur les variables de type Buffer Les variables de type Buffer peuvent être manipulés de la même façon qu'une variable de type Chaîne de caractères. Pour affecter une variable Buffer, utilisez une des syntaxes suivantes : - affectation d'une chaîne à une variable de type Buffer :
<Nom de la variable Buffer> = <Ma Chaîne>. Par exemple :
MonBuffer est un Buffer MonBuffer = "WINDEV est formidable" // En ANSI, la variable MonBuffer contient : WINDEV est formidable // En UNICODE, la variable MonBuffer contient : // W0i0n0D0e0v0 0e0s0t0 0f0o0r0m0i0d0a0b0l0e0
- affectation d'un octet de la variable Buffer :
<Nom de la variable Buffer> [[<Indice de l'octet>]] = <Code ASCII de l'octet>. Par exemple :
MonBuffer est un Buffer MonBuffer[[1]] = 65 // MonBuffer contient "A"
Utilisation des fonctions : - Les fonctions Gauche, Droite et Milieu sont utilisables sur les variables de type Buffer. Pour plus de détails sur la syntaxe à utiliser, consultez l'aide de ces fonctions.
Non disponible. - La fonction Taille permet de connaître la taille réelle des données contenues dans la variable de type Buffer (en octets).
Utilisation des opérateurs : L'opérateur [[ ]] permet d'accéder : - à un octet de la variable de type Buffer. Par exemple :
MonBuffer est un Buffer MonBuffer = "WINDEV est formidable" MonBuffer[[1]] = "W"
- à une partie de la variable de type Buffer. Par exemple :
MonBuffer est un Buffer MonBuffer = "WINDEV est formidable" Info(MonBuffer[[8 À 15]])
Comparaison de buffers :Il est possible de comparer un buffer ou une portion de buffer à un buffer en littéral. Il est possible d'écrire par exemple :
SI MonBuffer = [1,2,3] ALORS ...
SI MonBuffer[1 SUR 2] = [1,2] ALORS ...
Le type 'Buffer sur' : Syntaxe et manipulations avancées Déclarer une variable de type Buffer sur
<Nom de la variable> est un Buffer sur <Taille du buffer>
OU
<Nom de la variable 1>, <Nom de la variable 2> sont des Buffers sur <Taille des buffers>
Détail de la syntaxe | | <Nom de la variable> : | Nom de la variable à déclarer. | <Taille du buffer> : | Taille en octets du buffer. |
Remarques : - Les mots-clés un, une et des ne sont pas obligatoires : ce sont des mots d'agrément.
- Par défaut, une variable de type 'Buffer sur' est remplie avec le caractère '0'.
Le type 'Buffer sur' n'est pas disponible.
Exemples :
MonBuffer est un Buffer sur 4 MonBuffer = "ABCDE" // MonBuffer contient "ABCD" MonBuffer = "ZZ" // MonBuffer contient "ZZCD"
Manipulations des variables de type 'Buffer sur' (appelés buffers fixes) Les buffers fixes se manipulent de la même manière que les buffers simples. Cependant, quelques différences doivent être prises en compte. En effet, en cours d'exécution, la taille réelle des données contenues dans la variable de type Buffer n'est pas connue : - Lors d'une écriture plus longue que la taille de la variable Buffer, l'écriture est tronquée à la taille de la variable Buffer.
- Lors d'une écriture plus petite que la taille de la variable Buffer, la partie non écrite de la variable Buffer conserve sa valeur précédente.
Pour manipuler ce type de variable Buffer, il est conseillé de toujours stocker la taille réelle du buffer dans une variable de type Entier. Rappel : le type Buffer gère automatiquement sa taille. Lors de l'utilisation d'un buffer fixe, il est recommandé de copier rapidement sa valeur dans un buffer automatique.
// Utilisation d'une API retournant la taille d'un buffer bBufferFixe est un Buffer sur 200 nTaille est un entier // Appel de l'API nTaille = API(<Nom API>, <Paramètres>, bBufferFixe,200) // Copie du buffer bBuffer est un Buffer bBuffer = Gauche(bBufferFixe, nTaille)
Documentation également disponible pour…
|
|
|
|
|
|
|