在下面的说明中,type 指 bindat-type 返回的 Bindat 类型值,raw 指字节数组,struct 指表示解包后字段数据的关联列表。
该函数根据 type,从单字节字符串或字节数组 raw 中解包数据。
通常从字节数组开头开始解包,但如果 idx 非 nil,则使用该从零开始的起始位置。
返回值是一个关联列表或嵌套关联列表,其中每个元素描述一个解包后的字段。
该函数从嵌套关联列表 struct 中取出某个字段的数据。struct 通常由
bindat-unpack 返回。如果只传入一个 name 参数,
表示提取顶层字段的值。多个 name 参数表示逐级查找子结构。整数类型的
name 会作为数组下标使用。
例如,(bindat-get-field struct a b 2 c) 表示
取出 struct 中 a 字段、b 子字段的第三个元素里的 c 字段。(对应 C 语言语法中的 struct.a.b[2].c)。
尽管打包和解包操作会改变数据在内存中的组织形式,但它们会保留数据的 总长度(total length),即所有字段长度之和(以字节为单位)。该值通常无法仅从规范或关联列表中直接得出,而需要结合两者共同计算。同样,待解包的字符串或数组的长度 也可能大于规范所描述的数据总长度。
该函数根据 type,返回 struct 中数据的总长度。
该函数根据 type,将关联列表 struct 中的数据打包成字节数组并返回。
默认会创建一个新的字节数组并从头开始填充。但如果 raw
非 nil,则指定一个预分配的单字节字符串或向量用于存放打包结果。如果 idx 非 nil,则指定
在 raw 中开始打包的偏移量。
使用预分配空间时,应确保 (length raw) 大于等于总长度,以避免越界错误。
将互联网地址向量 ip 转换为常见的点分格式字符串。
(bindat-ip-to-string [127 0 0 1])
⇒ "127.0.0.1"