voxelcore/doc/ru/scripting/builtins/libbyteutil.md
Xertis 32feb78002
Improved docs (#708)
* начало переписи доков

* extensions update

* libapp update

* libfile update

* io_stream update

* Update io_stream.md

* io_stream update x3

* io_stream update x4

* libtime update

* libgui update + make bytearray.md

* libinput update

* Update libapp.md

* Update libapp.md

* libgui update

* events.md ru fix

* да ну не надо так делать

--> не имеет смысла, ибо гитхаб -> показывает адекватно

* types refactoring

* fixes

* Update libblock.md

* Update libblock.md

* Update libbyteutil.md
2025-12-18 12:58:39 +03:00

2.9 KiB
Raw Blame History

Библиотека byteutil

Библиотека предоставляет функции для работы с массивами байт, представленными в виде таблиц или Bytearray.

byteutil.pack(format: string, ...) -> Bytearray
byteutil.tpack(format: string, ...) -> table

Возвращает массив байт, содержащий переданные значения, упакованные в соответствии со строкой формата. Аргументы должны точно соответствовать значениям, требуемым форматом.

Строка формата состоит из специальных символов и символов значений.

Специальные символы позволяют указать порядок байт для последующих значений:

Символ Порядок байт
@ Системный
= Системный
< Little-endian
> Big-endian
! Сетевой (big-endian)

Символы значений описывают тип и размер.

Символ Аналог в С++ Тип Lua Размер
b int8_t number 1 байт
B uint8_t number 1 байт
? bool boolean 1 байт
h int16_t number 2 байта
H uint16_t number 2 байта
i int32_t number 4 байта
I uint32_t number 4 байта
f float32_t number 4 байта
l int64_t number 8 байтов
L uint64_t number 8 байтов
d float64_t number 8 байтов

Warning

Из-за отсутствия в Lua целочисленного типа для значений l и L гарантируется только выходной размер в 8 байт, значение может отличаться от ожидаемого.

byteutil.unpack(format: string, bytes: table|Bytearray) -> ...

Извлекает значения из массива байт, ориентируясь на строку формата.

Пример:

debug.print(byteutil.tpack('>iBH?', -8, 250, 2019, true))
-- выводит:
-- debug.print(
--  {
--    255,
--    255,
--    255,
--    248,
--    250,
--    7,
--    227,
--    1
--  }
-- )

local bytes = byteutil.pack('>iBH?', -8, 250, 2019, true)
debug.print(byteutil.unpack('>iBH?', bytes))
-- выводит:
--  -8      250     2019    true