BinaryFormat.Choice
Syntax
BinaryFormat.Choice(binaryFormat as function, chooseFunction as function, optional type as nullable type, optional combineFunction as nullable function) as function
Om
Returnerar ett binärt format som väljer nästa binära format baserat på ett värde som redan har lästs. Värdet för binärt format som skapas av den här funktionen fungerar i steg:
- Det binära format som anges av parametern
binaryFormat
används för att läsa ett värde. - Värdet skickas till den valfunktion som anges av parametern
chooseFunction
. - Valfunktionen inspekterar värdet och returnerar ett andra binärt format.
- Det andra binära formatet används för att läsa ett andra värde.
- Om kombinationsfunktionen har angetts skickas de första och andra värdena till kombinationsfunktionen och det resulterande värdet returneras.
- Om kombinationsfunktionen inte har angetts returneras det andra värdet.
- Det andra värdet returneras.
Den valfria type
parametern anger vilken typ av binärt format som ska returneras av valfunktionen. Antingen type any
, type list
eller type binary
kan anges. Om parametern type
inte har angetts används den type any
. Om type list
eller type binary
används kan systemet returnera en strömning binary
eller list
ett värde i stället för ett buffrat värde, vilket kan minska mängden minne som krävs för att läsa formatet.
Exempel 1
Läs en lista över byte där antalet element bestäms av den första byteen.
Användning
let
binaryData = #binary({2, 3, 4, 5}),
listFormat = BinaryFormat.Choice(
BinaryFormat.Byte,
(length) => BinaryFormat.List(BinaryFormat.Byte, length)
)
in
listFormat(binaryData)
Output
{3,4}
Exempel 2
Läs en lista över byte där antalet element bestäms av den första byteen och bevara den första byteläsningen.
Användning
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}]
Exempel 3
Läs en lista med byte där antalet element bestäms av den första byteen med hjälp av en strömningslista.
Användning
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}