DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

Aide / WLangage / Syntaxe WLangage / Types du WLangage
  • Pourquoi utiliser le type Buffer ?
  • Affectation d'une variable de type Buffer
  • Utilisation des fonctions
  • Utilisation des opérateurs
  • Comparaison de buffers
  • Manipulations des variables de type 'Buffer sur' (appelés buffers fixes)
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaEtats et RequêtesCode Utilisateur (MCU)
WEBDEV
WindowsLinuxPHPWEBDEV - Code Navigateur
WINDEV Mobile
AndroidWidget AndroidiPhone/iPadWidget IOSApple WatchMac CatalystUniversal Windows 10 App
Autres
Procédures stockées
Buffer (Type de variable)
En anglais : Buffer
Le type Buffer correspond à une zone mémoire binaire.
Grâce à ce type, un code manipulant des données binaires sera portable entre une application WINDEV standard et une application WINDEV Mobile.
  • Sous WINDEV, une variable de type "chaîne" 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" contient des données binaires, ces données peuvent être erronées (conversion malencontreuse par exemple). Pour manipuler des données binaires, il est conseillé 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.
Le type Buffer est un type nullable. Pour plus de détails, consultez Activation des types nullables.
WEBDEV - Code Navigateur En code navigateur, le type Buffer est limité : il est notamment disponible pour utiliser les fonctions BufferVersHexa et HexaVersBuffer, la fonction Taille et les fonctions de Hash.
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 :
01

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
Syntaxe

Déclarer une variable de type Buffer Masquer les détails

<Nom de la variable> est un Buffer

<Nom de la variable 1>, <Nom de la variable 2> sont des Buffers
<Nom de la variable> :
Nom de la variable à déclarer. Par défaut, une variable de type Buffer est vide.

Déclarer et initialiser une variable de type Buffer Masquer les détails

<Nom de la variable> est un Buffer = [<Valeur hexa 1>, <Valeur hexa 2>, ..., <Valeur hexa N>]
<Nom de la variable> :
Nom de la variable à déclarer.
<Valeur hexa> :
Valeur hexadécimale.
Exemple :
b est un Buffer = [0x01, 0x02, 0x03]

Déclarer une variable de type Buffer sur Masquer les détails

<Nom de la variable> est un Buffer sur <Taille du buffer>

<Nom de la variable 1>, <Nom de la variable 2> sont des Buffers sur <Taille des buffers>
<Nom de la variable> :
Nom de la variable à déclarer. Par défaut, une variable de type Buffer est vide.
<Taille du buffer> :
Taille en octets du buffer.
Par défaut, une variable de type 'Buffer sur' est remplie avec le caractère '0'.
WEBDEV - Code Navigateur 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"
Remarques

Affectation d'une variable de type Buffer

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.
    WEBDEV - Code Navigateur 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]])
WEBDEV - Code Navigateur Non disponible.

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 ...
WEBDEV - Code Navigateur Non disponible.

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)
Version minimum requise
  • Version 11
Documentation également disponible pour…
Commentaires
Cliquez sur [Ajouter] pour publier un commentaire

Dernière modification : 28/03/2024

Signaler une erreur ou faire une suggestion | Aide en ligne locale