mirror of
https://github.com/MihailRis/voxelcore.git
synced 2026-10-04 10:31:50 +00:00
* начало переписи доков * 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
2.9 KiB
2.9 KiB
Библиотека 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