import struct # 默认容量 DefaultCapacity = 128 class BxByteArray: def __init__(self, capacity): self.list = bytearray(capacity) self.next = 0 def add(self, data): if self.next == len(self.list): # 扩展容量 self.list.extend(bytearray(len(self.list) * 2)) self.list[self.next] = data self.next += 1 def addInt16(self, data, endian): # 确保容量足够 if self.next + 1 >= len(self.list): self.list.extend(bytearray(len(self.list) * 2)) # 打包为2字节 if endian == 0: # LITTLE packed = struct.pack('h', data) # 复制到列表 self.list[self.next:self.next+2] = packed self.next += 2 def addInt(self, data, endian): # 确保容量足够 if self.next + 3 >= len(self.list): self.list.extend(bytearray(len(self.list) * 2)) # 打包为4字节 if endian == 0: # LITTLE packed = struct.pack('i', data) # 复制到列表 self.list[self.next:self.next+4] = packed self.next += 4 def addBytes(self, src): if src: # 确保容量足够 if self.next + len(src) - 1 >= len(self.list): self.list.extend(bytearray(len(self.list) + len(src))) # 复制数据 self.list[self.next:self.next+len(src)] = src self.next += len(src) def addBytesOffsetLength(self, src, offset, length): if src: # 确保容量足够 if self.next + length - 1 >= len(self.list): self.list.extend(bytearray(len(self.list) + length)) # 复制数据 self.list[self.next:self.next+length] = src[offset:offset+length] self.next += length def set(self, index, data): if index < len(self.list): self.list[index] = data def get(self, index): return self.list[index] def Build(self): return bytes(self.list[:self.next]) def size(self): return self.next def clear(self): self.next = 0 # 创建BxByteArray实例的函数 def NewBxByteArray(capacity): return BxByteArray(capacity) # 创建默认容量的BxByteArray实例的函数 def NewDefaultBxByteArray(): return NewBxByteArray(DefaultCapacity)