51 lines
1.9 KiB
Python
51 lines
1.9 KiB
Python
from Device import Codec
|
||
import time
|
||
class Compiler:
|
||
def __init__(self, codes, filename='a.out'):
|
||
self.filename = filename
|
||
self.data = []
|
||
|
||
for i in codes:
|
||
self.data.append(Codec.str2int(i))
|
||
|
||
self.write()
|
||
|
||
def write(self):
|
||
# 打开文件,以二进制写入模式打开
|
||
with open(self.filename, 'wb') as f:
|
||
maxNum = max(self.data)
|
||
byte_representation = (maxNum.bit_length() + 7) // 8
|
||
if byte_representation > 139:
|
||
raise MemoryError()
|
||
# 写入整数数据
|
||
f.write(b'\x5a\xe3'+byte_representation.to_bytes(1, 'little'))
|
||
for num in self.data:
|
||
# 将整数转换为字节,并写入文件
|
||
f.write(num.to_bytes(byte_representation , 'little')) # 假设每个整数都用4个字节表示
|
||
|
||
def read(self):
|
||
int_data_read = [] # 用于存储读取的整数数据
|
||
|
||
# 打开文件,以二进制读取模式打开
|
||
with open(self.filename, 'rb') as f:
|
||
# 读取整数数据
|
||
MagicNumber = f.read(2)
|
||
|
||
size = int.from_bytes(f.read(1), 'little')
|
||
while True:
|
||
# 从文件中读取4个字节,并将其转换为整数
|
||
int_bytes = f.read(size)
|
||
|
||
if not int_bytes: # 如果读取完整个文件,则退出循环
|
||
break
|
||
int_value = int.from_bytes(int_bytes, 'little') # 假设之前用little-endian序列化
|
||
int_value = Codec.int2list(int_value)
|
||
|
||
int_value = Codec.int2str(int_value)
|
||
int_data_read.append(int_value)
|
||
|
||
return int_data_read
|
||
start = time.time()
|
||
c = Compiler(["l","h",'kakshdhsh sjjsvav'])
|
||
print(time.time()-start)
|
||
print(list(c.read())) |