如何正确打包一个字符和一个数字?
How to pack a character and a number correctly?
我正在学习 python 中的客户端-服务器通信,我想发送一些打包的 structures.I 想打包一个数学符号和一个数字。我这样试过:
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]
我不知道如何正确执行此操作。
第一个问题是您不必要地尝试(顺序)解压缩您的论点。 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)
我正在学习 python 中的客户端-服务器通信,我想发送一些打包的 structures.I 想打包一个数学符号和一个数字。我这样试过:
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]
我不知道如何正确执行此操作。
第一个问题是您不必要地尝试(顺序)解压缩您的论点。 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)