zephyr/scripts/file2hex.py

50 lines
1.4 KiB
Python
Executable File

#!/usr/bin/env python3
#
# Copyright (c) 2017 Intel Corporation
#
# SPDX-License-Identifier: Apache-2.0
# This converts a file to a list of hex characters which can then
# be included to a source file.
# Optionally, the output can be compressed if needed.
import argparse
import codecs
import gzip
import io
def parse_args():
global args
parser = argparse.ArgumentParser(description = __doc__,
formatter_class = argparse.RawDescriptionHelpFormatter)
parser.add_argument("-f", "--file", required=True, help="Input file")
parser.add_argument("-g", "--gzip", action="store_true",
help="Compress the file using gzip before output")
args = parser.parse_args()
def get_nice_string(list_or_iterator):
return ", ".join( "0x" + str(x) for x in list_or_iterator)
def make_hex(chunk):
hexdata = codecs.encode(chunk, 'hex').decode("utf-8")
hexlist = map(''.join, zip(*[iter(hexdata)]*2))
print(get_nice_string(hexlist) + ',')
def main():
parse_args()
if args.gzip:
with open(args.file, 'rb') as fg:
content = io.BytesIO(gzip.compress(fg.read(), compresslevel=9))
for chunk in iter(lambda: content.read(8), b''):
make_hex(chunk)
else:
with open(args.file, "rb") as fp:
for chunk in iter(lambda: fp.read(8), b''):
make_hex(chunk)
if __name__ == "__main__":
main()