You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
55 lines
1.4 KiB
55 lines
1.4 KiB
#!/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()
|
|
|