将大量参数传递给struct.pack
我正在使用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')
请注意,如果你指定的长度比输入的字符串长,输出的结果会用空字符填充。