AYUDA EN LÍNEA
 WINDEVWEBDEV Y WINDEV MOBILE

Ayuda / WLanguage / Sintaxis WLanguage / 
  • ¿Por qué utilizar el tipo Buffer?
  • Asignar una variable de tipo Buffer
  • Uso de funciones
  • Operadores
  • Comparar búferes
  • Manipular variables de tipo 'Buffer of' (también llamados búferes fijos)
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaReportes y ConsultasCódigo de Usuario (UMC)
WEBDEV
WindowsLinuxPHPWEBDEV - Código Navegador
WINDEV Mobile
AndroidWidget Android iPhone/iPadIOS WidgetApple WatchMac CatalystUniversal Windows 10 App
Otros
Procedimientos almacenados
El tipo Buffer corresponde a un área de memoria binaria.
Este tipo permite la portabilidad de un código que manipula datos binarios entre una aplicación WINDEV y una aplicación WINDEV Mobile.
  • En WINDEV, una variable de tipo String puede contener caracteres y datos binarios (por ejemplo, una imagen).
  • En WINDEV Mobile, si una variable de tipo String contiene datos binarios, estos datos pueden estar dañados (conversión incorrecta, por ejemplo). Para manipular datos binarios, le recomendamos utilizar variables de tipo Buffer.
El tipo Buffer no tiene un marcador final específico y permite almacenar ceros binarios.
Existen dos tipos de variables:
  • Buffer: Este tipo permite manipular un área de memoria con tamaño dinámico: este se adapta automáticamente al contenido del búfer.
  • Buffer of: Este tipo permite manipular un área de memoria cuyo tamaño (en bytes) se establece en tiempo de compilación. Este es un tipo avanzado que permite realizar operaciones específicas en la memoria y utilizar algunas APIs de Windows.
Observación: Las variables de tipo Buffer están codificadas en base64 en JSON y XML.
El tipo Buffer admite valores Null. Para obtener más información, consulte Permitir tipos que admiten valores Null.
WEBDEV - Código Navegador En código Navegador, el tipo Buffer tiene varias limitaciones: se utiliza sobre todo con las funciones BufferToHexa y HexaToBuffer, la función Length y las funciones Funciones Hash.
¿Por qué utilizar el tipo Buffer?
En WINDEV, se puede utilizar el siguiente código para manipular bytes como valores binarios:
S is string = Charact(1) + Charact(0)
El área de memoria correspondiente es:
01

El mismo código tiene un comportamiento diferente si se ejecuta en Ansi o Unicode.
Para tener el mismo código en ANSI y en UNICODE, la cadena debe ser reemplazada por un búfer. El código pasa a ser:
S is Buffer
S[[1]] = 1
S[[2]] = 0
Sintaxis

Declarar una variable de tipo Buffer Ocultar los detalles

<Variable name> is Buffer

<Variable name 1>, <Variable name  2> are Buffers
<Variable name>:
Nombre de la variable a declarar. De forma predeterminada, una variable de tipo Buffer está vacía.

Declarar e inicializar una variable de tipo Buffer Ocultar los detalles

<Variable name> is Buffer = [<Hex value 1>, <Hex value 2>, ..., <Hex value N>]
<Variable name>:
Nombre de la variable a declarar.
<Hexa value>:
Valor hexadecimal.
Ejemplo:
b is Buffer = [0x01, 0x02, 0x03]

Declarar una variable de tipo 'Buffer of' Ocultar los detalles

<Variable name> is Buffer of <Buffer size>

<Variable name 1>, <Variable name 2> are Buffers of <Size of buffers>
<Variable name>:
Nombre de la variable a declarar. De forma predeterminada, una variable de tipo Buffer está vacía.
<Buffer size>:
Tamaño del búfer expresado en bytes.
De forma predeterminada, el carácter '0' se asigna a una variable de tipo 'Buffer of'.
WEBDEV - Código Navegador El tipo 'Buffer of' no está disponible.
Ejemplos:
MiBuffer is Buffer of 4
MyBuffer = "ABCDE" // MyBuffer contains "ABCD"
MyBuffer = "ZZ"    // MyBuffer contains "ZZCD"
Observaciones

Asignar una variable de tipo Buffer

Para asignar una variable de tipo Buffer, utilice una de las siguientes sintaxis:
  • asignar una cadena a una variable Buffer:
    <Nombre de variable Buffer> = <Mi Cadena>.
    Por ejemplo:
    MyBuffer is Buffer
    MyBuffer = "WINDEV is great"
    // In ANSI, MyBuffer contains: WINDEV is great
    // In UNICODE, MyBuffer contains: 
    // W0i0n0D0e0v0 0i0s0 0gr0e0a0t0
  • asignar un byte a una variable de tipo Buffer:
    <Nombre de la variable Buffer> [[<Índice del byte>]] = <Código ASCII del byte>.
    Por ejemplo:
    MyBuffer is Buffer
    MyBuffer[[1]] = 65 // MyBuffer contains "A"

Uso de funciones

  • Las funciones Left, Right y Middle se pueden utilizar en variables de tipo Buffer. Para obtener más información, consulte la página de ayuda sobre estas funciones.
    WEBDEV - Código Navegador No disponible.
  • La función Length permite conocer el tamaño real de los datos de la variable de tipo Buffer (en bytes).

Operadores

El operador [[ ]] permite acceder a:
  • un byte de la variable de tipo Buffer. Por ejemplo:
    MyBuffer is Buffer
    MyBuffer = "WINDEV is great"
    MyBuffer[[1]] = "W"
  • una parte de la variable de tipo Buffer. Por ejemplo:
    MyBuffer is Buffer
    MyBuffer = "WINDEV is great"
    Info(MyBuffer[[8 TO 15]])
WEBDEV - Código Navegador No disponible.

Comparar búferes

Puede comparar un búfer o una parte de un búfer con valores específicos.
Por ejemplo, puede escribir:
IF MyBuffer = [1,2,3] THEN ...

IF MyBuffer[1 ON 2] = [1,2] THEN ...
WEBDEV - Código Navegador No disponible.

Manipular variables de tipo 'Buffer of' (también llamados búferes fijos)

Los búferes fijos se utilizan de la misma forma que los búferes simples. No obstante, cabe señalar algunas diferencias.
En tiempo de ejecución, se desconoce el tamaño real de los datos que se encuentran en la variable de tipo Buffer:
  • Los datos escritos se truncan si superan el tamaño de la variable de tipo Buffer.
  • Al escribir datos más pequeños que el tamaño de la variable de tipo Buffer, la sección no escrita de la variable Buffer conserva su valor anterior.
Para manipular variables de tipo Buffer, se recomienda almacenar el tamaño real del búfer en una variable de tipo Integer.
Recordatorio: el tipo Buffer gestiona automáticamente su tamaño. Cuando se utiliza un búfer fijo, se recomienda copiar rápidamente su valor en un búfer automático.
// Use an API that returns the size of a buffer
bFixedBuffer is Buffer of 200
nSize is int
// Call the API
nSize = API(<API name>, <Parameters>, bFixedBuffer, 200)
// Copy the buffer
bBuffer is Buffer
bBuffer = Left(bFixedBuffer, nSize)
Versión mínima requerida
  • Versión 11
Esta página también está disponible para…
Comentarios
Haga clic en [Agregar] para publicar un comentario

Última modificación: 02/04/2024

Señalar un error o enviar una sugerencia | Ayuda local