Python字节缓冲区对象?

10 投票
3 回答
31851 浏览
提问于 2025-04-16 22:37

在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 个回答

1

只需把 struct.pack 的逻辑放到你自己的类里面就行了。

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')
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'

这里有一个文档的链接,可以帮助你了解更多信息。

撰写回答