Tarantool CE/EE Documentation portal logo
Помощь
Обновлена 15 сентября 2026 г. в 08:55

Модуль pickle

Указатель

Ниже приведен перечень всех функций модуля pickle.

Имя

Назначение

pickle.pack()

Преобразование переменных Lua в бинарный формат

pickle.unpack()

Преобразование переменных Lua обратно из бинарного формата

pickle.pack(format, argument [, argument ...])

Для использования примитивов бинарного протокола Tarantool из Lua необходимо преобразовывать переменные Lua в бинарный формат. Вспомогательная функция pickle.pack() создана по образцу функции pack языка Perl.

b, B

преобразует скалярное значение Lua в 1-байтовое целое число и сохраняет его в результирующей строке

s, S

преобразует скалярное значение Lua в 2-байтовое целое число и сохраняет его в результирующей строке, младший байт первым

i, I

преобразует скалярное значение Lua в 4-байтовое целое число и сохраняет его в результирующей строке, младший байт первым

l, L

преобразует скалярное значение Lua в 8-байтовое целое число и сохраняет его в результирующей строке, младший байт первым

n

преобразует скалярное значение Lua в 2-байтовое целое число и сохраняет его в результирующей строке, в порядке от старшего к младшему

N

преобразует скалярное значение Lua в 4-байтовое целое число и сохраняет его в результирующей строке, в порядке от старшего к младшему

q, Q

преобразует скалярное значение Lua в 8-байтовое целое число и сохраняет его в результирующей строке, в порядке от старшего к младшему

f

преобразует скалярное значение Lua в 4-байтовое число с плавающей точкой (float) и сохраняет его в результирующей строке

d

преобразует скалярное значение Lua в 8-байтовое число двойной точности (double) и сохраняет его в результирующей строке

a, A

преобразует скалярное значение Lua в последовательность байтов и сохраняет ее в результирующей строке

Параметры:

  • format (string) — строка, содержащая спецификаторы формата
  • argument(s) (scalar-value) — скалярные значения для форматирования

Возвращает

бинарная строка, содержащая все аргументы, упакованные в соответствии со спецификаторами формата.

Тип возвращаемого значения

string

Скалярное значение может быть либо переменной, либо литеральным значением. Следует помнить, что большие целые числа нужно вводить с tonumber64() или суффиксами LL или ULL.

Возможные ошибки:

  • Количество аргументов не соответствует формату. Примечание: избыточные значения просто игнорируются.
  • Ожидалось 8/16/32/64-битное целое число.
  • Неподдерживаемый спецификатор формата pack.

Пример:

tarantool> pickle = require('pickle')---...tarantool> box.space.tester:insert{0, 'hello world'}---- [0, 'hello world']...tarantool> box.space.tester:update({0}, {{'=', 2, 'bye world'}})---- [0, 'bye world']...tarantool> box.space.tester:update({0}, {         >   {'=', 2, pickle.pack('iiA', 0, 3, 'hello')}         > })---- [0, "\0\0\0\0\x03\0\0\0hello"]...tarantool> box.space.tester:update({0}, {{'=', 2, 4}})---- [0, 4]...tarantool> box.space.tester:update({0}, {{'+', 2, 4}})---- [0, 8]...tarantool> box.space.tester:update({0}, {{'^', 2, 4}})---- [0, 12]...

pickle.unpack(format, binary-string)

Противоположность pickle.pack(). Внимание: если используется спецификатор формата 'A', он должен идти последним.

Параметры:

  • format (string) — строка, содержащая спецификаторы формата
  • binary-string (string) — распаковываемая бинарная строка

Возвращает

Список строк или чисел.

Тип возвращаемого значения

table

Возможные ошибки:

  • Слишком много байтов: распаковано X, всего Y. X < Y.
  • Получено X байтов (ожидалось: Y+). X < Y.
  • Неподдерживаемый спецификатор формата.

Пример:

tarantool> pickle = require('pickle')---...tarantool> tuple = box.space.tester:replace{0}---...tarantool> string.len(tuple[1])---- 1...tarantool> pickle.unpack('b', tuple[1])---- 48...tarantool> pickle.unpack('bsi', pickle.pack('bsi', 255, 65535, 4294967295))---- 255- 65535- 4294967295...tarantool> pickle.unpack('ls', pickle.pack('ls', tonumber64('18446744073709551615'), 65535))---...tarantool> num, num64, str = pickle.unpack('slA', pickle.pack('slA', 666,         > tonumber64('666666666666666'), 'string'))---...