Spec-Zone.ru › Elisp

Функции для распаковки и упаковки байтов

В данной документации 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API