Вы сказали в комментарии:
Я смогу обойтись, зная строку, сгенерированную каждым из
следующее: struct.pack ('> i', 4), struct.pack ('> i', 8) и
struct.pack ( '> я', 10)
эффектор '> i' означает 32-разрядное целое число со знаком бигендии. Для неотрицательного ввода x простой эквивалент Python будет
chr((x >> 24) & 255) + chr((x >> 16) & 255) + chr((x >> 8) & 255) + chr(x & 255)
Вы должны быть в состоянии выразить это в Lua без особых затруднений.
Вы сказали в еще одном комментарии:
Я ... не понимаю ответа (@john machin)
chr (x) легко найти в документации. У Lua должна быть такая функция, возможно, даже с тем же именем.
i >> n
сдвигает меня вправо на n бит. Если я без знака, это эквивалентно i // ( 2 ** n)
, где //
- целочисленное деление на пол Python.
i & 255
является побитовым и эквивалентен i % 256
.
У Луа должны быть оба.
В этом случае +
- это конкатенация строк.
Посмотрите на это:
>>> import binascii
>>> def pack_be_I(x):
... return (
... chr((x >> 24) & 255) +
... chr((x >> 16) & 255) +
... chr((x >> 8) & 255) +
... chr(x & 255)
... )
...
>>> for anint in (4, 8, 10, 0x01020304, 0x04030201):
... packed = pack_be_I(anint)
... hexbytes = binascii.hexlify(packed)
... print anint, repr(packed), hexbytes
...
4 '\x00\x00\x00\x04' 00000004
8 '\x00\x00\x00\x08' 00000008
10 '\x00\x00\x00\n' 0000000a
16909060 '\x01\x02\x03\x04' 01020304
67305985 '\x04\x03\x02\x01' 04030201
>>>
Вы заметите, что для 10
необходим вывод '\x00\x00\x00\n'
... обратите внимание, что '\x0a'
aka '\n'
aka chr(10)
нуждается в уходе. Если вы пишете этот материал в файл в Windows, вы должны открыть файл в режиме двоичный ('wb'
, а не 'w'
), в противном случае библиотека времени выполнения вставит байт возврата каретки в соответствовать соглашениям Windows, MS-DOS, CP / M для текстовых файлов.