Python中从字符串中读取字节

3
我有一个代表从网络读取的字节的Python字符串,我需要从该字符串连续读取几个字节。例如,我在一个字符串中有9个字节,我需要将4个字节作为整数读取,2个字节作为short类型读取,并读取3个自定义数据类型的字节。
在Python中是否有reader可以执行此类操作:
reader = reader(my_string)    

integer = int.from_bytes(reader.read(4), 'big')
short = int.from_bytes(reader.read(2), 'big')
custom = customType.Unpack(reader.read(3))

我想使用struct.unpack,但是我不知道如何处理非原始类型。

有什么想法吗?

谢谢。


1
你的自定义非原始类型是什么? - John Zwinck
这是另一组数据的表示形式,如原始类型,只有此自定义类型知道如何解包它。也许在我的例子中,自定义类型是1个字节和1个short。 - user3442365
3
我不理解。你是在说你有解包文件的代码,希望我们告诉你如何解包,但如果没有你拥有的解包代码,你就不能进行解包? - John Zwinck
1
struct模块是专门为此而设计的。 - Antimony
我想要的是从表示字节的字符串中提取数据。我有解包所有内容的代码,但我需要一个读取器来为每种类型读取N个字节。如果我将读取器发送到我的自定义类中,我希望它能够从字符串的当前位置进行读取。例如:我读取了4个字节,并将读取器传递给另一个类,该类将读取N个字节,然后再将其传递给另一个类,该类将继续读取X个字节等等... - user3442365
使用struct模块时,每次读取内容都需要更新偏移量,并将此偏移量发送到自定义类中,以便它知道从哪里开始读取。 - user3442365
1个回答

2
我想你需要这个:

我猜你想要这个:

import struct
integer, short = struct.unpack('>ih', my_string)
custom = customType.Unpack(my_string[6:9])

也许是这样:
from StringIO import StringIO
reader = StringIO(my_string)
integer, short = struct.unpack('>ih', reader.read(6))
custom = customType.Unpack(reader.read(3))

阅读“struct”部分,然后导入struct - stanleyxu2005

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接