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

2024-05-12 23:03:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在学习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]

我不知道如何正确地做这件事


Tags: 服务器data客户机object错误符号数学结构
1条回答
网友
1楼 · 发布于 2024-05-12 23:03:58

第一个问题是,您不必要地试图(按顺序)解包您的参数。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)

相关问题 更多 >