# -*- coding: utf-8 -*- ''' * @Author : zoufuzhou * @Date : 2024-08-23 16:34:37 * @Description : Memory map header structure * @LastEditTime : 2024-08-26 16:34:37 ''' import struct class Head: __format_string = 'III' # 使用 __slots__ 来优化内存使用 __slots__ = ('maxsize', 'size', 'next') def __init__(self: 'Head', maxsize: int, size: int, next: int): self.maxsize = maxsize self.size = size self.next = next def length(self) -> int: """返回打包后的字节长度。""" return struct.calcsize(self.__format_string) def pack(self) -> bytes: """将属性打包为字节数据。""" return struct.pack(self.__format_string, self.maxsize, self.size, self.next) def unpack(self, data: bytes) -> None: """从字节数据解包到属性中。""" # print("|Head|unpack|self.maxsize:"+str(self.maxsize)+", self.size:"+str(self.size)+ # ", self.next:"+str(self.next)+",self.__format_string:"+self.__format_string # +",self.length():"+str(self.length())+",datalen:"+str(len(data))) if len(data) != self.length(): raise ValueError( f"数据长度不匹配: 期望 {self.length()}, 实际 {len(data)}.") self.maxsize, self.size, self.next = struct.unpack( self.__format_string, data) # print("|Head|unpack|self.maxsize:"+str(self.maxsize)+", self.size:"+str(self.size)+", self.next:"+str(self.next)+",self.__format_string:"+self.__format_string) def __str__(self) -> str: return f"maxsize: {self.maxsize}, size: {self.size}, next: {self.next}" def __repr__(self) -> str: return self.__str__()