4@brief Convert file string to zlib compressed C array
8@copyright Copyright (c) 2022
10https://nachtimwald.com/2019/10/09/python-binary-to-c-header/
20def bin2cc(data: bytes, var_name: str) -> str:
21 """Generate a C char array from bytes
23 data (bytes): The bytes
24 var_name (str): The C variable name
27 str: The string of C code
32 data = bytes(data,
"UTF-8")
33 data = zlib.compress(data, 9)
35 data = data.hex(
" ", 1).split(
" ")
38 out.append(f
"unsigned char {var_name}[] = {{")
40 chunks = [data[i : i + LINE_LEN]
for i
in range(0, len(data), LINE_LEN)]
44 for i, nums
in enumerate(chunks):
45 line =
", ".join([f
"0x{c}" for c
in nums])
46 comma =
"," if (i < len(chunks) - 1)
else ""
47 padding_len = LINE_LEN - len(nums)
48 out.append(f
" {line}{comma}")
51 out[len(out) - 1] +=
", 0x00" * padding_len
54 out.append(f
"unsigned int {var_name}_pad_len = {len(data)+padding_len};")
55 out.append(f
"unsigned int {var_name}_uncmp_len = {ulen};")
56 out.append(f
"unsigned int {var_name}_len = {len(data)};")
63 parser = argparse.ArgumentParser(description=
"Generate binary header output")
64 parser.add_argument(
"-i",
"--input", required=
True, help=
"Input file")
65 parser.add_argument(
"-o",
"--out", required=
True, help=
"Output file")
66 parser.add_argument(
"-v",
"--var", required=
True, help=
"Variable name to use in file")
68 args = parser.parse_args()
72 with open(args.input,
"r", encoding=
"UTF-8")
as file:
75 out =
bin2cc(data, args.var)
76 with open(args.out,
"w", encoding=
"UTF-8")
as file:
82if __name__ ==
"__main__":