BinaryFormat.Group
语法
BinaryFormat.Group(binaryFormat as function, group as list, optional extra as nullable function, optional lastKey as any) as function
关于
参数如下:
binaryFormat
参数指定键值的二进制格式。group
参数提供有关已知项组的信息。- 可选的
extra
参数可用于指定函数,该函数会为任何非预期键之后的值返回二进制格式值。 如果未指定extra
参数,则会在存在非预期键值时引发错误。
group
参数指定项定义的列表。 每个项定义都是一个包含 3-5 个值的列表,如下所示:
- 键值。 与项对应的键的值。 此值在项集中必须唯一。
- 项格式。 与项值对应的二进制格式。 此值支持各项具有不同的格式。
- 项出现次数。 项应在组中出现的次数的
BinaryOccurrence.Type
值。 必需项不存在时会导致错误。 对必需或可选重复项的处理方式类似于非预期键值。 - 默认项值(可选)。 如果默认项值出现在项定义列表中,且不为 NULL,则会使用它代替默认值。 重复或可选项的默认值为 NULL,重复值的默认值为空列表 { }。
- 项值转换(可选)。 如果项值转换函数出现在项定义列表中,且不为 NULL,则会在返回它之前,调用它来转换项值。 仅当项出现在输入中时才调用转换函数(永远不会使用默认值调用它)。
示例 1
以下函数假设键值是单个字节,且组中有 4 个预期项,所有项在键之后都跟有一个字节的数据。 项在输入中的显示方式如下所示:
- 键 1 为必需项,显示时值为 11。
- 键 2 为重复项,显示两次,值为 22,且结果为值 { 22, 22 }。
- 键 3 为可选项,不显示,且结果为 NULL 值。
- 键 4 为重复项,但不显示,结果为 { } 值。
- 键 5 不属于该组,但显示一次,值为 55。 使用键值 5 调用额外的函数,并返回对应该值 (BinaryFormat.Byte) 的格式。 已读取并弃用值 55。
使用情况
let b = #binary({ 1, 11, 2, 22, 2, 22, 5, 55, 1, 11 }), f = BinaryFormat.Group( BinaryFormat.Byte, { { 1, BinaryFormat.Byte, BinaryOccurrence.Required }, { 2, BinaryFormat.Byte, BinaryOccurrence.Repeating }, { 3, BinaryFormat.Byte, BinaryOccurrence.Optional }, { 4, BinaryFormat.Byte, BinaryOccurrence.Repeating } }, (extra) => BinaryFormat.Byte )in f(b)
输出
{ 11, { 22, 22 }, null, { } }
示例 2
下例解释了项值转换和默认项值。 带有键 1 的重复项使用 List.Sum 对已读值的列表执行求和。 带有键 2 的可选项的默认值为 123,而非 NULL。
使用情况
let b = #binary({ 1, 101, 1, 102 }), f = BinaryFormat.Group( BinaryFormat.Byte, { { 1, BinaryFormat.Byte, BinaryOccurrence.Repeating, 0, (list) => List.Sum(list) }, { 2, BinaryFormat.Byte, BinaryOccurrence.Optional, 123 } } )in f(b)
输出
{ 203, 123 }