Condividi tramite


BinaryFormat.Choice

Sintassi

BinaryFormat.Choice(
    binaryFormat as function,
    chooseFunction as function,
    optional type as nullable type,
    optional combineFunction as nullable function
) as function

Informazioni su

Restituisce un formato binario che sceglie il formato binario successivo in base a un valore che è già stato letto. Il valore del formato binario prodotto dalla funzione opera in fasi:

  • Il formato binario specificato dal parametro binaryFormat viene usato per leggere un valore.
  • Il valore viene passato alla funzione di scelta specificata dal parametro chooseFunction.
  • La funzione di scelta controlla il valore e restituisce un secondo formato binario.
  • Il secondo formato binario viene usato per leggere un secondo valore.
  • Se la funzione di combinazione viene specificata, il primo e il secondo valore vengono passati alla funzione di combinazione e viene restituito il valore risultante.
  • Se la funzione di combinazione non viene specificata, viene restituito il secondo valore.
  • Il secondo valore viene restituito.

Il parametro facoltativo type specifica il tipo di formato binario che verrà restituito dalla funzione di scelta. È possibile specificare type any, type list o type binary. Se il parametro type non è specificato, viene usato type any. Se si usa type list o type binary, il sistema può essere in grado di restituire un valore binary o list di flusso anziché uno memorizzato nel buffer, riducendo in tal modo la quantità di memoria necessaria per leggere il formato.

Esempio 1

Leggere un elenco di byte in cui il numero di elementi è determinato dal primo byte.

Utilizzo

let
    binaryData = #binary({2, 3, 4, 5}),
    listFormat = BinaryFormat.Choice(
        BinaryFormat.Byte,
        (length) => BinaryFormat.List(BinaryFormat.Byte, length)
    )
in
    listFormat(binaryData)

Output

{3,4}

Esempio 2

Leggere un elenco di byte in cui il numero di elementi è determinato dal primo byte e conservare il primo byte letto.

Utilizzo

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)

Output

[length = 2, list = {3, 4}]

Esempio 3

Leggere un elenco di byte in cui il numero di elementi è determinato dal primo byte usando una lista streaming.

Utilizzo

let
    binaryData = #binary({2, 3, 4, 5}),
    listFormat = BinaryFormat.Choice(
        BinaryFormat.Byte,
        (length) => BinaryFormat.List(BinaryFormat.Byte, length),
        type list
    )
in
    listFormat(binaryData)

Output

{3, 4}