我正在尝试掌握Python 3中二进制数据的打包和拆包。除了一个问题外,它实际上并不难理解:
如果我有可变长度的文本字符串,并且想要以最优雅的方式打包和解压缩该怎么办?
据我所知,我只能直接解压缩固定大小的字符串吗?在那种情况下,是否有任何优雅的方法来解决此限制,而无需填充很多不必要的零?
该struct
模块仅支持固定长度的结构。对于变长字符串,您可以选择以下任一种:
动态构造格式字符串(str
将abytes
传递给之前,必须将其转换为a pack()
):
s = bytes(s, 'utf-8') # Or other appropriate encoding
struct.pack(“I%ds” % (len(s),), len(s), s)
跳过struct
并仅使用普通的字符串方法将字符串添加到您的pack()
-ed输出中:struct.pack("I", len(s)) + s
要打开包装,您只需要一次打开一些包装:
(i,), data = struct.unpack("I", data[:4]), data[4:]
s, data = data[:i], data[i:]
如果您要执行很多操作,则始终可以添加一个calcsize
用于执行字符串切片的辅助函数:
def unpack_helper(fmt, data):
size = struct.calcsize(fmt)
return struct.unpack(fmt, data[:size]), data[size:]
我一直在试图弄清楚Pack/Unpack的PHP实现是否能够完成Perl版本所能做到的事情。我希望能够在PHP中执行的示例是: http://perldoc.perl.org/perlpacktut.html#String-长度 此Perl代码的作用如下所述: 将两个包代码与斜杠(/)组合将它们与参数列表中的单个值关联。在pack中,参数的长度是根据第一个代码获取和打包的,而参数本身是在斜杠后用模
本文向大家介绍python 用struct模块解决黏包问题,包括了python 用struct模块解决黏包问题的使用技巧和注意事项,需要的朋友参考一下 为什么会出现黏包现象: 首先只有在TCP协议中才会出现黏包现象,是因为TCP协议是面向流的协议,在发送的数据传输的过程中还有缓存机制来避免数据丢失,因此,在连续发送小数据的时候,以及接收大小不符的时候容易出现黏包现象。本质还是因为我们在接收数据
问题内容: 我正在用Java解析具有以下规范的字节数组: 今天,我没有看到任何解决方案来解析此数组以获取具有正确类型的7变量。您是否确认或者我是否缺少Java中的魔术函数之类的东西,该函数允许在字节数组中查找字符串“限制”(我看不出如何将Minimum value与相关的ASCII字符区分开)。 两个字符串之间是否有关于特殊字符的“约定”? 问题答案: 好吧,您知道名字从字节9开始,姓氏在字节结尾
本文向大家介绍Python struct模块解析,包括了Python struct模块解析的使用技巧和注意事项,需要的朋友参考一下 python提供了一个struct模块来提供转换。下面就介绍这个模块中的几个方法。 struct.pack(): struct.pack用于将Python的值根据格式符,转换为字符串(因为Python中没有字节(Byte)类型,可以把这里的字符串理解为字节流,
本文向大家介绍Python中的包和模块实例,包括了Python中的包和模块实例的使用技巧和注意事项,需要的朋友参考一下 一、实例和结果 1)实例的结构和具体的文件: 2)PyCommonM.py 3) P1M.py: 4)P1MC.py: 5)P2M.py: 6) P2.py: 7) 运行p2.py的结果: 二、解释 * 一个py文件为一个module,例如module: PyCommonM.p
我希望用户首先选择要键入的单词数,然后将单词数相加(例如Hello and bye=5 3=所有行的总长度为8),但我不知道如何将数组中的所有元素相加。 我的代码: 谢谢你的帮助