如何将Perl的pack 'Nc*'格式转换为Python的struct.pack?

5 投票
2 回答
1078 浏览
提问于 2025-04-15 14:51

我正在把一个Perl脚本转换成Python,这个脚本用到了很多不同的包。我已经弄明白了每个包在“模板”中的字母差异,但我对Perl没有长度声明这一点有点困惑。

举个例子:

pack('Nc*',$some_integer,$long_array_of_integers);

我在Python的struct.pack中没有找到和这个“*”功能相对应的东西。有没有什么想法可以把它转换成Python呢?

2 个回答

1

Perl中的pack函数使用了'*'这个字符,和正则表达式里的用法类似——它表示可以匹配多个相同的东西。在这里,它的意思是可以处理多个带符号的整数。

在Python中,你只需要遍历字符串,然后把各个部分连接起来就可以了:

result = struct.pack('>L', some_integer)
for c in long_array_of_integers:
    result += struct.pack('b',c)
7

这样怎么样?

struct.pack('>I', some_integer) + struct.pack('b'*len(long_array), *long_array)

撰写回答