Python字节缓冲对象是什么?

10

在Python中是否有字节缓冲对象,可以向其中追加特定类型的值?(最好能指定大小端)

例如:

buf.add_int(4)    # should add a 4 byte integer
buf.add_short(10) # should add a 2 byte short
buf.add_byte(24)  # should add a byte

我知道我可以使用struct.pack,但这种方法似乎更容易。理想情况下,它应该像Java中的DataOutputStreamDataInputStream对象一样完成这个任务。

3个回答

11

你可以始终使用bitstring。它能够完成您提出的所有要求以及更多。

>>> import bitstring
>>> stream=bitstring.BitStream()
>>> stream.append("int:32=4")
>>> stream.append("int:16=10")
>>> stream.append("int:8=24")
>>> stream
BitStream('0x00000004000a18')
>>> stream.bytes
'\x00\x00\x00\x04\x00\n\x18'

这里是一个链接,指向文档


5
作为Kark Knechtel所建议的,您需要创建自己的类型来处理此问题。以下是对bytearray的快速扩展:
import struct

class DataStream(bytearray):

    def append(self, v, fmt='>B'):
        self.extend(struct.pack(fmt, v))

>>> x = DataStream()
>>> x.append(5)
>>> x
bytearray(b'\x05')
>>> x.append(-1, '>i')
>>> x
bytearray(b'\x05\xff\xff\xff\xff')

1
只需将 struct.pack 逻辑封装在你自己的类中。

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