49 lines
1.7 KiB
Python
49 lines
1.7 KiB
Python
# -*- 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__()
|