FF5Reader/bindiff.py

43 lines
970 B
Python
Raw Permalink Normal View History

2023-07-18 23:53:40 +09:30
#!/usr/bin/python3 -i
'''
Read in a bunch of small binary files, determine what parts of them are common, do something with all the differences.
Intended to separate SPC engine data from song data
'''
import sys
import traceback
def main(filenames):
common = []
uniques = []
common_str = []
try:
files = [open(f, 'rb') for f in filenames]
data = [f.read() for f in files]
except BaseException as e:
traceback.print_exc()
finally:
for file in files:
file.close()
for vals in zip(*data):
u = set(vals)
uniques.append(len(u))
if len(u) == 1:
common_str.append(vals[0])
else:
if len(common_str)>7:
common.append('x'+''.join(['{:02x}'.format(b) for b in common_str])+'\n')
common_str = []
with open('uniques.bin', 'wb') as out:
out.write(bytes(uniques))
with open('common.txt', 'w') as out:
out.writelines(common)
print(common)
if __name__ == '__main__':
main(sys.argv[1:])