В следующей документации type относится к значению типа Bindat, возвращаемому bindat-type, raw — к байтовому массиву, а struct — к ассоциативному списку, представляющему распакованные данные полей.
Эта функция распаковывает данные из однобайтовой строки или байтового массива raw
в соответствии с type. Обычно распаковка начинается с начала байтового массива, но если idx не равен nil, он задаёт нулевую начальную позицию, которую следует использовать вместо этого.
Возвращаемое значение — это ассоциативный список или вложенный ассоциативный список, в котором каждый элемент описывает одно распакованное поле.
Эта функция извлекает данные поля из вложенного ассоциативного списка struct. Обычно struct возвращается bindat-unpack. Если name соответствует только одному аргументу, это означает извлечение значения поля верхнего уровня. Несколько аргументов name задают повторный поиск во вложенных структурах. Целочисленный name действует как индекс массива.
Например, (bindat-get-field struct a b 2 c) означает найти поле c в третьем элементе подполя b поля a. (Это соответствует struct.a.b[2].c в синтаксисе языка программирования C.)
Хотя операции упаковки и распаковки изменяют организацию данных (в памяти), они сохраняют общую длину данных, которая равна сумме длин всех полей в байтах. Это значение, как правило, не присуще ни только спецификации, ни только ассоциативному списку; напротив, обе части информации участвуют в его вычислении. Аналогично, длина распаковываемой строки или массива может быть больше общей длины данных, описанной в спецификации.
Эта функция возвращает общую длину данных в struct в соответствии с type.
Эта функция возвращает байтовый массив, упакованный в соответствии с type из данных в ассоциативном списке struct. Обычно она создаёт и заполняет новый байтовый массив, начиная с начала. Однако если raw не равен nil, он задаёт предварительно выделенную однобайтовую строку или вектор для упаковки. Если idx не равен nil, он задаёт начальное смещение для упаковки в raw.
При предварительном выделении следует убедиться, что (length raw) достигает или превышает общую длину, чтобы избежать ошибки выхода за диапазон.
Преобразует вектор интернет-адреса ip в строку в обычной точечной нотации.
(bindat-ip-to-string [127 0 0 1])
⇒ "127.0.0.1"