Template
1
0
mirror of https://github.com/bol-van/zapret2.git synced 2026-03-20 16:25:49 +00:00

update docs

This commit is contained in:
bol-van
2025-12-28 12:37:58 +03:00
parent d1a489a196
commit b9321619fc

View File

@@ -1682,33 +1682,39 @@ Lua 5.3 имеет встроенные битовые операции, но н
особенно в условиях частого отсутствия FPU на роутерах и других embedded устройствах.
Чтобы не зависеть от всей этой неразберихи, в nfqws2 выставляется свой собственный набор битовых функций и функций сдвига,
который не зависит от типа движка Lua и его версии. Все типы битовых операций работают с беззнаковыми числами от 8 до 32 бит.
который не зависит от типа движка Lua и его версии. Все типы битовых операций работают с беззнаковыми числами от 8 до 48 бит.
При передаче отрицательных чисел они интерпретируются в дополнительном коде. Например, в 32 битах -2 становится 0xFFFFFFFE, в 8 битах - 0xFE.
Большая разрядность не поддерживается, поскольку возникают несовместимости между Lua 5.3+ и более старыми версиями.
Только в Lua 5.3 реализован тип integer 64 bit. В более старых используется формат плавающей точки double с мантиссой 53 бит.
Только в Lua 5.3 реализован тип integer 64 bit. В более старых используется формат плавающей точки double с мантиссой 53 бит, что позволяет передать до 48 бит int.
Стандартные операции сдвига и побитовые логические операции :
```
function bitlshift(u32, bits)
function bitrshift(u32, bits)
function bitand(u32_1, u32_2, ...., u32_N)
function bitor(u32_1, u32_2, ...., u32_N)
function bitxor(u32_1, u32_2, ...., u32_N)
function bitnot(u32)
function bitlshift(u48, bits)
function bitrshift(u48, bits)
function bitand(u48_1, u48_2, ...., u48_N)
function bitor(u48_1, u48_2, ...., u48_N)
function bitxor(u48_1, u48_2, ...., u48_N)
function bitnot(u48)
function bitnot8(u8)
function bitnot16(u16)
function bitnot24(u24)
function bitnot32(u32)
function bitnot48(u48)
```
bitand, bitor и bitxor работает с произвольным количеством чисел.
bitnot имеет версии для различных разрядностей. Вариант `bitnot` является синонимом `bitnot48`.
Операции получения и установки отдельных битов :
```
function bitget(u32, bit_from, bit_to)
function bitset(u32, bit_from, bit_to, set)
function bitget(u48, bit_from, bit_to)
function bitset(u48, bit_from, bit_to, set)
```
- bitget получает число из диапазона битов u32 с номерами от bit_from до bit_to. нумерация битов с 0.
- bitset записывает число set в диапазон битов u32 с номерами от bit_from до bit_to. нумерация битов с 0. старшие биты set, выходящие за пределы (bit_to-bit_from), игнорируются.
- bitget получает число из диапазона битов u48 с номерами от bit_from до bit_to. нумерация битов с 0.
- bitset записывает число set в диапазон битов u48 с номерами от bit_from до bit_to. нумерация битов с 0. старшие биты set, выходящие за пределы (bit_to-bit_from), игнорируются.
### Операции с беззнаковыми числами
@@ -1722,6 +1728,7 @@ function u8(raw_string, offset)
function u16(raw_string, offset)
function u24(raw_string, offset)
function u32(raw_string, offset)
function u48(raw_string, offset)
```
Эти функции используются для извлечения числовых полей в формате big endian из raw строки.
@@ -1735,6 +1742,7 @@ function bu8(u8)
function bu16(u16)
function bu24(u24)
function bu32(u32)
function bu48(u48)
```
Преобразуют число в raw строку в формате big endian.
@@ -1745,11 +1753,12 @@ function bu32(u32)
```
function swap16(u16)
function swap32(u32)
function swap48(u48)
```
#### uXadd
Инвертируют порядок следования байт в u16 или u32. Если в вашей структуре порядок байт little endian,
Инвертируют порядок следования байт в u16, u32 или u48. Если в вашей структуре порядок байт little endian,
можно использовать uX/buX + swap.
```
@@ -1757,6 +1766,7 @@ function u8add(u8_1, u8_2, ...., u8_N)
function u16add(u16_1, u16_2, ...., u16_N)
function u24add(u24_1, u24_2, ...., u24_N)
function u32add(u32_1, u32_2, ...., u32_N)
function u48add(u32_1, u48_2, ...., u48_N)
```
Функции для сложения произвольного количества беззнаковых чисел указанной разрядности.