Friday, 5 May 2017

Binary Files to C array Transformer

Python script converting binary files into C byte arrays 

#!/usr/bin/python
## bf2ca.py binary file to C array script
## author: Frank Rehberger
## License: Apache License V2
## Usage:
##    chmod +x bf2ca.py
##    ./bf2ca.py file1.bin  file2.bin file3.bin
import sys
import os
from array import array

def getvarname(datafile):
   return datafile[:datafile.rfind(".")]

def printAsEmbeddedArray(datafile):
   if not os.path.exists(datafile):
      sys.stderr.write("ERROR: Datafile %r was not found!" % (datafile,))
      return 1

   with open(datafile, "rb") as f:
      ar = ["(char)0x{:02x}".format(ord(c)) for c in f.read()]
      varname = getvarname(datafile)
      print "static char", varname, "[] = {", ", ".join(ar), "};"
      print

def main(argv):
   if len(argv) < 2:
      sys.stderr.write("Usage: %s +" % (argv[0],))
      return 1
   filelist = argv[1:]
   for datafile in filelist:
       printAsEmbeddedArray(datafile)

   varnamelist = ["{:s}".format(getvarname(f)) for f in filelist] + ["NULL"]
   print "static char* BUF[] = {", ", ".join(varnamelist), "};"
  
   varnamelist = ["sizeof({:s})".format(getvarname(f)) for f in filelist] + ["0"]
   print "static size_t BUFLEN[] = {", ", ".join(varnamelist), "};"

if __name__ == "__main__":
    sys.exit(main(sys.argv))

No comments:

Post a Comment