如何正确打包字符和数字?

问题描述 投票:0回答:1

我正在学习python中的客户端 - 服务器通信,我想发送一些打包的结构。我想打包一个数学符号和数字。我试过这样的:

idx         = 50    
value1      = "<"
value2      = idx
packer      = struct.Struct('1s I')
packed_data = packer.pack(*value1, *value2)

但是我得到了错误:

packed_data = packer.pack(*value1, *value2)
TypeError: 'int' object is not iterable

或者这个错误:

packed_data = packer.pack(*value1, *value2)
struct.error: argument for 's' must be a bytes object

如果我这样做:

    value2      = [idx]

我不知道如何正确地做到这一点。

python python-3.x int iterable pack
1个回答
0
投票

第一个问题是你不必要地尝试(序列)解压缩你的参数。 Struct格式需要一个bytes和一个int,你(几乎)已经拥有它们。

第二个问题是"<"是一个Unicode字符串,而pack则需要字节。您需要首先正确编码字符串。

packed_data = packer.pack(value1.encode('utf-8'), value2)

您使用的特定编码无关紧要,只要您使用相同的编码解压缩数据即可。

请注意,如果您确实具有无法在一个字节中编码的Unicode字符,则您的字符串格式将是错误的。 struct模块本身不处理可变长度字符串,因此单独编码int并将其与编码字符串连接起来可能更简单。

value = 
packed_data = value1.encode('utf-8') + struct.pack("I", value2)
© www.soinside.com 2019 - 2024. All rights reserved.