Функции для распаковки и упаковки байтов
В данной документации type относится к значению типа Bindat, возвращаемому из bindat-type, raw — к массиву байтов, а struct — к списку alist, представляющему данные, распакованные по полям.
- Функция: bindat-unpack type raw &optional idx
-
Эта функция распаковывает данные из строковой переменной или массива байтов raw в соответствии с type. Обычно распаковка начинается с начала массива байтов, но если idx имеет значение, отличное от
nil, то это указывает на нулевую позицию для начала распаковки.Значение представляет собой список alist или вложенный список alist, в котором каждый элемент описывает одно распакованное поле.
- Функция: bindat-get-field struct &rest name
-
Эта функция выбирает данные поля из вложенного списка alist struct. Обычно struct возвращался функцией
bindat-unpack. Если name соответствует одному аргументу, это означает извлечение значения поля верхнего уровня. Несколько аргументов name указывают на многократный поиск подструктур. Целочисленный аргумент name выступает в качестве индекса массива.Например,
(bindat-get-field struct a b 2 c)означает поиск поляcв третьем элементе подполяbполяa. (Это соответствуетstruct.a.b[2].cв синтаксисе языка программирования C).
Хотя операции упаковки и распаковки изменяют организацию данных (в памяти), они сохраняют общую длину данных, которая представляет собой сумму длин всех полей в байтах. Это значение, как правило, не является внутренним ни для спецификации, ни для списка alist; вместо этого обе эти части информации участвуют в его вычислении. Точно так же длина строки или массива, которые распаковываются, может быть больше общей длины данных, описанной в спецификации.
- Функция: bindat-length type struct
Эта функция возвращает общую длину данных в struct в соответствии с type.
- Функция: bindat-pack type struct &optional raw idx
-
Эта функция возвращает массив байтов, упакованный в соответствии с type из данных в списке alist struct. Обычно она создает и заполняет новый массив байтов, начиная с начала. Однако, если raw имеет значение, отличное от
nil, оно указывает на предварительно выделенную строку или вектор для упаковки. Если idx имеет значение, отличное отnil, это указывает на начальный смещение для упаковки в raw.При предварительном выделении необходимо убедиться, что
(length raw)соответствует или превышает общую длину, чтобы избежать ошибки выхода за пределы диапазона.
- Функция: bindat-ip-to-string ip
-
Преобразовать вектор интернет-адреса ip в строку в обычном точечном формате.
(bindat-ip-to-string [127 0 0 1]) ⇒ "127.0.0.1"
Copyright © 1990-1996, 1998-2026 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Bindat-Functions.html