Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Syntax
BinaryFormat.Choice(
binaryFormat as function,
chooseFunction as function,
optional type as nullable type,
optional combineFunction as nullable function
) as function
Acerca de
Devuelve un formato binario que elige el siguiente formato binario basado en un valor que ya se ha leído. El valor de formato binario generado por esta función funciona en fases:
- El formato binario especificado por el
binaryFormatparámetro se usa para leer un valor. - El valor se pasa a la función de elección especificada por el
chooseFunctionparámetro . - La función choice inspecciona el valor y devuelve un segundo formato binario.
- El segundo formato binario se usa para leer un segundo valor.
- Si se especifica la función combine, los valores primero y segundo se pasan a la función combine y se devuelve el valor resultante.
- Si no se especifica la función combine, se devuelve el segundo valor.
- Se devuelve el segundo valor.
El parámetro opcional type indica el tipo de formato binario que devolverá la función choice. Se type anypuede especificar , type listo type binary . Si no se especifica el type parámetro , type any se usa. Si type list se usa o type binary , el sistema puede devolver un streaming binary o list un valor en lugar de uno almacenado en búfer, lo que puede reducir la cantidad de memoria necesaria para leer el formato.
Ejemplo 1
Lea una lista de bytes donde el primer byte determina el número de elementos.
Uso
let
binaryData = #binary({2, 3, 4, 5}),
listFormat = BinaryFormat.Choice(
BinaryFormat.Byte,
(length) => BinaryFormat.List(BinaryFormat.Byte, length)
)
in
listFormat(binaryData)
Salida
{3,4}
Ejemplo 2
Lea una lista de bytes donde el número de elementos viene determinado por el primer byte y conserve la primera lectura de bytes.
Uso
let
binaryData = #binary({2, 3, 4, 5}),
listFormat = BinaryFormat.Choice(
BinaryFormat.Byte,
(length) => BinaryFormat.Record([
length = length,
list = BinaryFormat.List(BinaryFormat.Byte, length)
])
)
in
listFormat(binaryData)
Salida
[length = 2, list = {3, 4}]
Ejemplo 3
Lea una lista de bytes donde el número de elementos viene determinado por el primer byte mediante una lista de streaming.
Uso
let
binaryData = #binary({2, 3, 4, 5}),
listFormat = BinaryFormat.Choice(
BinaryFormat.Byte,
(length) => BinaryFormat.List(BinaryFormat.Byte, length),
type list
)
in
listFormat(binaryData)
Salida
{3, 4}