我有一个包含多个长度字节数组的类,以及一个将它们拼接在一起的创建缓冲区函数:
data
我的问题是:是否可以将所有全局字节数据包装到一个数组中,以便我可以调用
class message():
msg_hdr_ONE = bytearray(b'\x00')
msg_hdr_TWO = bytearray(b'\x00')
msg_hdr_THREE = bytearray(b'\x00\x00')
msg_hdr_FOUR = bytearray(b'\x00\x00')
def createBuffer(self):
self.byteArrays = bytearray()
self.byteArrays.extend(self.msg_hdr_ONE )
self.byteArrays.extend(self.msg_hdr_TWO)
self.byteArrays.extend(self.msg_hdr_THREE )
self.byteArrays.extend(self.msg_hdr_FOUR )
return byteArrays
而不是逐个扩展bytearray。
仅供参考:稍后在我打电话的代码中,例如:
self.byteArrays.extend(arrayOfBytearrays)
更改类成员变量并通过网络发送数据。
由于
编辑: self。 dict .vales()为我提供了类中保存的正确字节数,但顺序错误。
答案 0 :(得分:0)
最简单的可能是列表,并添加了b''.join()
的所有标题部分:
class Message():
def __init__(self):
self.headers = [bytearray(b'\x00'),
bytearray(b'\x00'),
bytearray(b'\x00\x00'),
bytearray(b'\x00\x00')]
def createBuffer(self):
return b''.join(self.headers)
索引从0
开始。因此,修改标头THREE
中的第一个字节将是索引[2][0]
:
>>> mymessage = Message()
>>> mymessage.createBuffer()
b'\x00\x00\x00\x00\x00\x00'
>>> mymessage.headers[2][0] = 0x0B
>>> mymessage.createBuffer()
b'\x00\x00\x0b\x00\x00\x00'
答案 1 :(得分:0)
我认为这里最好的方法是在创建缓冲区函数中使用sum或itertools.chain.from_iterable(或者减少,但是它已经完全弃用了):
总和:
import itertools
class Message(object):
self.msg_hdr_ONE = bytearray(b'\x00')
self.msg_hdr_TWO = bytearray(b'\x00')
self.msg_hdr_THREE = bytearray(b'\x00\x00')
self.msg_hdr_FOUR = bytearray(b'\x00\x00')
def createBuffer(self):
byteArrays = bytearray(
itertools.chain.from_iterable((
self.msg_hdr_ONE,
self.msg_hdr_TWO,
self.msg_hdr_TREE,
self.msg_hdr_FOUR,
)))
return byteArrays
请注意,第二个参数是第一个被sumed的参数,因此不会引发TypeError
使用itertools.chain.from_iterable:
model.NewComment
(我认为' .join()不会在这里工作,因为这些是字节数组,但你应该检查它以确保:))