| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- 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)
- else: # BIG
- 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)
- else: # BIG
- 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)
|