project done but test failed

This commit is contained in:
Burgess Leo
2025-05-27 13:10:13 +08:00
parent 491685e892
commit 4d7c2e995c
4 changed files with 41 additions and 55 deletions

View File

@@ -109,10 +109,19 @@ def GetDeviceId(cursor: sqlite3.Cursor) -> int:
# 获取文件大小(伪数据)
def GetFileSize(file80h_pattern):
if not file80h_pattern or not isinstance(file80h_pattern, list):
return 0
if file80h_pattern[0].get('is_resident'):
return GetFragmentData(file80h_pattern)[0].get('byte_length')
fragments = GetFragmentData(file80h_pattern)
if fragments and len(fragments) > 0:
return fragments[0].get('byte_length', 0)
else:
size_list = ExtractSequenceHexValues(file80h_pattern)[56:64]
sequence_list = ExtractSequenceHexValues(file80h_pattern)
if len(sequence_list) < 64:
raise ValueError("序列长度不足,无法解析文件大小")
size_list = sequence_list[56:64]
size = hex_list_to_int(size_list)
return size

View File

@@ -251,50 +251,32 @@ def ExtractSequenceHexValues(file80h_pattern):
return sequence_list
def ExportDataRunList(data_run):
def ExportDataRunList(data_run_list):
"""
将 data_run 中的多个 Data Run 提取为独立的 list 片段。
参数:
data_run (list): 十六进制字符串组成的列表,表示 Data Run 内容
返回:
list: 每个元素是一个代表单个 Data Run 的 list
将 data_run_list 拆分成多个独立的 Data Run 片段。
"""
result = []
pos = 0
while pos < len(data_run):
current_byte = data_run[pos]
while pos < len(data_run_list):
current_byte = data_run_list[pos]
if current_byte == '00':
# 遇到空运行块,停止解析
break
try:
header = int(current_byte, 16)
len_bytes = (header >> 4) & 0x0F
offset_bytes = header & 0x0F
if len_bytes == 0 or offset_bytes == 0:
print(f"⚠️ 无效的字段长度,跳过位置 {pos}")
run_length = 1 + offset_bytes + len_bytes
if pos + run_length > len(data_run_list):
print(f"⚠️ 数据越界,停止解析")
break
# 计算当前 Data Run 总长度
run_length = 1 + offset_bytes + len_bytes
# 截取当前 Data Run
fragment = data_run[pos: pos + run_length]
fragment = data_run_list[pos: pos + run_length]
result.append(fragment)
# 移动指针
pos += run_length
except Exception as e:
print(f"❌ 解析失败位置 {pos}{e}")
break
print(f"❌ 解析 Data Run 失败位置 {pos}, 错误: {e}")
pos += 1 # 跳过一个字节继续解析
return result
@@ -326,6 +308,10 @@ def parse_data_run(data_run, previous_cluster=0, cluster_size=512):
len_bytes = (header >> 4) & 0x0F
offset_bytes = header & 0x0F
if len(data_run) < 1 + offset_bytes + len_bytes:
print(f"⚠️ 数据长度不足,无法解析 Data Run")
return None
# 提取偏移字段和长度字段
offset_data = data_run[1:1 + offset_bytes]
length_data = data_run[1 + offset_bytes:1 + offset_bytes + len_bytes]
@@ -416,7 +402,6 @@ def GetFragmentData(file80h_pattern):
results = ParseMultipleDataRuns(fragments)
return results
# if __name__ == '__main__':
# arri80_data = GetFile80hPattern(r"Z:\hello.txt")
# data = GetFragmentData(arri80_data)