将大量参数传递给struct.pack

1 投票
2 回答
1232 浏览
提问于 2025-04-16 08:53

我正在使用struct.pack这个方法,它可以接收可变数量的参数。我想把一个字符串转换成字节。如果字符串比较短(比如说'名字'),我可以这样做:

bytes = struct.pack('4c','n','a','m','e')

但是如果我的字符串有80个字符长,我该怎么办呢?

我试过用格式字符串's',而不是'80c'来进行struct.pack,但结果和上面的调用不一样。

2 个回答

1

这听起来有点不太对。因为在Python 2.x中,字符串本身就是字节;所以你可以直接这样做:

my_string = 'I am some big string'
my_bytes = my_string

在Python 3中,字符串默认是Unicode对象。要想得到字节,你需要对字符串进行编码。

my_bytes = my_string.encode('utf-8')

如果你真的想使用 struct.pack,你可以使用 * 语法,就像教程中描述的那样

my_bytes = struct.pack('20c', *my_string)

或者

my_bytes = struct.pack('20s', my_string)
1

使用“80s”,而不是仅仅用“s”。这里的输入是一个完整的字符串,而不是一系列的字符。也就是说:

bytes = struct.pack('4s','name')

请注意,如果你指定的长度比输入的字符串长,输出的结果会用空字符填充。

撰写回答