<p>你在评论中说:</p>
<blockquote>
<p>I may be able to get by with knowing the string generated by each of
the following: struct.pack('>i',4),struct.pack('>i',8), and
struct.pack('>i',10)</p>
</blockquote>
<p>效应器“>;i”表示bigendian有符号32位整数。对于非负输入x,简单的Python等价物是</p>
<p><code>chr((x >> 24) & 255) + chr((x >> 16) & 255) + chr((x >> 8) & 255) + chr(x & 255)</code></p>
<p>你应该能够在Lua中毫不费力地表达出来。在</p>
<p>你在另一条评论中说:</p>
<blockquote>
<p>I ... don't understand an answer (@john machin)</p>
</blockquote>
<p>chr(x)很容易在文档中找到。Lua应该有这样一个函数,甚至可能同名。在</p>
<p><code>i >> n</code>将i右移n位。如果i是无符号的,这相当于<code>i // ( 2 ** n)</code>,其中<code>//</code>是Python的整数楼层除法。在</p>
<p><code>i & 255</code>是位的,它等价于<code>i % 256</code>。在</p>
<p>Lua应该有这两样东西。在</p>
<p>在本例中,<code>+</code>是字符串连接。在</p>
<p>看看这个:</p>
<pre><code>>>> 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
>>>
</code></pre>
<p>您会注意到<code>10</code>所需的输出是<code>'\x00\x00\x00\n'</code>。。。请注意,<code>'\x0a'</code>aka<code>'\n'</code>aka<code>chr(10)</code>需要护理。如果要将这些内容写入Windows上的文件中,则必须以<strong>二进制</strong>模式(<code>'wb'</code>,而不是<code>'w'</code>)打开该文件,否则运行时库将插入回车字节,以符合Windows、MS-DOS、CP/M文本文件约定。在</p>