BinaryFormat.Choice
Sintaxis
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 formato binario siguiente según 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 parámetro
binaryFormat
se usa para leer un valor. - El valor se pasa a la función de elección que especifica el parámetro
chooseFunction
. - La función de elección 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 de combinación, se pasan el primer y el segundo valor a esta función y se devuelve el valor resultante.
- Si no se especifica la función de combinación, se devuelve el segundo valor.
- Se devuelve el segundo valor.
El parámetro type
opcional indica el tipo de formato binario que devolverá la función de elección. Puede especificar type any
, type list
o type binary
. Si no se especifica el parámetro type
, se usa type any
. Si se usa type list
o type binary
, el sistema puede devolver un valor binary
o list
en secuencia en vez de uno almacenado en búfer, lo que puede reducir la cantidad de memoria necesaria para leer el formato.
Ejemplo 1
Leer una lista de bytes cuyo número de elementos viene determinado por el primer byte.
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
Leer una lista de bytes cuyo número de elementos viene determinado por el primer byte y conservar el primer byte leído.
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
Leer una lista de bytes cuyo número de elementos viene determinado por el primer byte con una lista en secuencia.
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}