□□□□□□□□
□■■□□■■□
□■■□□■■□
□□□□□□□□
□□■■■■□□
□■□□□□■□
□□■□□■□□
□□□■■□□□
こんな感じのを16進数データ(00666600 3c422418)にしたい:
#! /usr/bin/env python # -*- coding: utf-8 -*- import os, sys, re def split_list(l, n): for idx in range(0, len(l), n): yield l[idx:idx + n] def list2hex(l): value = 0 for v in l: value = value << 1 | v return value def main(): units_per_line = -1 units = 0 values = [] with open(sys.argv[1], encoding="utf-8") as f: for line in f.readlines(): line = line.rstrip() for c in line: if c == "□": values.append(0) units += 1 elif c == "■": values.append(1) units += 1 else: raise NotImplementedError() if units_per_line < 0: units_per_line = units for subvalues in split_list(values, 32): strfmt = "" subvalues_len = len(subvalues) if subvalues_len % 8 == 0: strfmt = "{{:{:02d}x}}".format(subvalues_len//4) else: for _ in range((subvalues_len//8+1)*8 - subvalues_len): subvalues.append(0) strfmt = "{{:{:02d}x}}".format(len(subvalues)//4) #raise NotImplementedError() print(strfmt.format(list2hex(subvalues))) if __name__ == "__main__": main()