二进制转换为C语言数组-Python实现

下面的Python程序可以实现将一个二进制文件转换为C语言的数组格式:

#!/usr/bin/python

import sys

DEBUG = False

def printline():
    print '-'*80

def ShowCmdArgs():
    i = 0
    for arg in sys.argv:
        print 'arg', i, ':', arg
        i = i + 1

def usage():
    progname = sys.argv[0]
    printline()
    print 'Usage:'
    print 'bin2C.py -i binfilename -o cfilename'
    printline()


def readbin(filename=''):
    if filename == '':
        return ''
    else:
        lines = ''
        try:
            fd = open(filename, 'rb')
        except:
            print 'Open ' + filename + ' Fail!'
            return ''
        else:
            buff = fd.read()
            fd.close()
            return buff

def main():
    iname = ''
    oname = ''
    if DEBUG:
        ShowCmdArgs()
    if len(sys.argv) == 3:
        if sys.argv[1] == '-i':
            iname = sys.argv[2]
        else:
            usage()
            return
    elif len(sys.argv) == 5:
        if sys.argv[1] == '-i':
            iname = sys.argv[2]
            if sys.argv[3] == '-o':
                oname = sys.argv[4]
            else:
                usage()
                return
        elif sys.argv[1] == '-o':
            oname = sys.argv[2]
            if sys.argv[3] == '-i':
                iname = sys.argv[4]
            else:
                usage()
                return
        else:
            usage()
            return
    else:
        usage()
        return

    if iname != '':
        print 'In: ' + iname

    if oname != '':
        print 'Out: ' + oname

    ibuff = readbin(iname)
    #print ibuff

    keystring = ''
    keyidx = 0
    for key in ibuff:
        if ((keyidx + 1) % 8) == 0:
            keystring = keystring + '0x%02x' % ord(key)
            keystring = keystring + '\n'
        else:
            keystring = keystring + '0x%02x ' % ord(key)
        keyidx = keyidx + 1

    if oname == '':
        print keystring
    else:
        try:
            fd = open(oname, 'w')
        except:
            print 'Open ' + oname + ' Fail'
        else:
            fd.write(keystring)
            fd.close()

    print 'Tatol len: ' + str(keyidx)

main()

代码写得比较匆忙,但经验证可用。


顺便贴出一个base64格式的pem文件转换为C格式的pyhon实现:

#!/usr/bin/python

import base64
import sys

DEBUG = False

def printline():
    print '-'*80

def ShowCmdArgs():
    i = 0
    for arg in sys.argv:
        print 'arg', i, ':', arg
        i = i + 1

def usage():
    progname = sys.argv[0]
    printline()
    print 'Usage:'
    print 'pem2C.py -i pemfilename -o cfilename'
    printline()

def readpem(filename=''):
    if filename == '':
        return ''
    else:
        lines = ''
        linenum = 0
        try:
            fd = open(filename, 'r')
        except:
            print 'Open ' + filename + ' Fail!'
            return ''
        else:
            for line in fd:
                if '---' in line:
                    pass
                else:
                    for ch in line:
                        if ch == '\n' or ch == '\r':
                            pass
                        else:
                            lines = lines + ch
            fd.close()
            return lines

def main():
    iname = ''
    oname = ''
    if DEBUG:
        ShowCmdArgs()
    if len(sys.argv) == 3:
        if sys.argv[1] == '-i':
            iname = sys.argv[2]
        else:
            usage()
            return
    elif len(sys.argv) == 5:
        if sys.argv[1] == '-i':
            iname = sys.argv[2]
            if sys.argv[3] == '-o':
                oname = sys.argv[4]
            else:
                usage()
                return
        elif sys.argv[1] == '-o':
            oname = sys.argv[2]
            if sys.argv[3] == '-i':
                iname = sys.argv[4]
            else:
                usage()
                return
        else:
            usage()
            return
    else:
        usage()
        return

    if iname != '':
        print 'In: ' + iname

    if oname != '':
        print 'Out: ' + oname

    pem = readpem(iname)
    print pem
    keys = base64.b64decode(pem)

    keystring = ''
    keyidx = 0
    for key in keys:
        if ((keyidx + 1) % 8) == 0:
            keystring = keystring + '0x%02x' % ord(key)
            keystring = keystring + '\n'
        else:
            keystring = keystring + '0x%02x ' % ord(key)
        keyidx = keyidx + 1

    if oname == '':
        print keystring
    else:
        try:
            fd = open(oname, 'w')
        except:
            print 'Open ' + oname + ' Fail'
        else:
            fd.write(keystring)
            fd.close()

    print 'Tatol len: ' + str(keyidx)

main()
此程序可以将BASE64编码格式的pem文件或crt文件转换为二进制,然后在转换为C语言数值格式。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值