Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Sintaxe
BinaryFormat.Choice(
binaryFormat as function,
chooseFunction as function,
optional type as nullable type,
optional combineFunction as nullable function
) as function
Sobre
Retorna um formato binário que escolhe o próximo formato binário com base em um valor que já foi lido. O valor de formato binário produzido por essa função funciona em estágios:
- O formato binário especificado pelo parâmetro
binaryFormaté usado para ler um valor. - O valor é passado para a função de escolha especificada pelo parâmetro
chooseFunction. - A função de escolha inspeciona o valor e retorna um segundo formato binário.
- O segundo formato binário é usado para ler um segundo valor.
- Se a função combine for especificada, os valores primeiro e segundo serão passados para a função de combinação e o valor resultante será retornado.
- Se a função combine não for especificada, o segundo valor será retornado.
- O segundo valor é retornado.
O parâmetro type opcional indica o tipo de formato binário que será retornado pela função de escolha. Pode ser especificado type any, type listou type binary. Se o parâmetro type não for especificado, type any será usado. Se type list ou type binary for usado, o sistema poderá retornar um valor binary ou list de streaming, em vez de um armazenado em buffer, o que pode reduzir a quantidade de memória necessária para ler o formato.
Exemplo 1
Leia uma lista de bytes em que o número de elementos é determinado pelo primeiro byte.
Uso
let
binaryData = #binary({2, 3, 4, 5}),
listFormat = BinaryFormat.Choice(
BinaryFormat.Byte,
(length) => BinaryFormat.List(BinaryFormat.Byte, length)
)
in
listFormat(binaryData)
Saída
{3,4}
Exemplo 2
Leia uma lista de bytes em que o número de elementos é determinado pelo primeiro byte e preserve o primeiro byte lido.
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)
Saída
[length = 2, list = {3, 4}]
Exemplo 3
Leia uma lista de bytes em que o número de elementos seja determinado pelo primeiro byte usando uma lista de fluxo.
Uso
let
binaryData = #binary({2, 3, 4, 5}),
listFormat = BinaryFormat.Choice(
BinaryFormat.Byte,
(length) => BinaryFormat.List(BinaryFormat.Byte, length),
type list
)
in
listFormat(binaryData)
Saída
{3, 4}