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 un elenco di flusso.

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}