【问题标题】:Python Hex File WritePython 十六进制文件写入
【发布时间】:2013-07-11 11:46:06
【问题描述】:

我有一个如下所示的列表:

['\x12', '\x13', '\x05', ... , '\xF2'] 

我正在尝试将它以二进制形式写入文件,如下所示:

00010010
00010011
00000101
11110010

这就是我现在正在做的事情:

for dataLine in readData:
    print int(binascii.hexlify(dataLine), 16)

然后像这样转换为 8 位二进制:

def dobin(n):
    digs = []

    while n > 0:
        digs.append(str(n % 2))
        n /= 2

    for x in range(len(digs), 8):
        digs.append('0')

    digs.reverse()
    return ''.join(digs)

有没有一种简单的方法可以将这些转换为二进制或更好的方法?

【问题讨论】:

    标签: python file binary hex


    【解决方案1】:

    这是一个可以在 Python 2.6(或更高版本)上运行的版本:

    >>> data = ['\x12', '\x13', '\x05', '\xF2']
    >>> [bin(ord(c))[2:].zfill(8) for c in data]                                                                                                                 
    ['00010010', '00010011', '00000101', '11110010']
    

    所以要将其写入文件,我可能会这样做:

    f = open('some_file', 'w')
    f.write('\n'.join(bin(ord(c))[2:].zfill(8) for c in data))
    f.close()
    

    编辑:没有意识到 bin() 在 Python 2.5 上不可用,您可以定义以下 bin() 函数来使其工作:

    def bin(i):
        s = []
        prefix = '0b' if i >= 0 else '-0b'
        if i < 0: i = -i
        while i:
            s.append('1' if i & 1 else '0')
            i = i >> 1
        return prefix + (''.join(reversed(s)) if s else '0')
    

    【讨论】:

    • 我不相信 bin 在 2.5 中可用...我收到名称未定义错误
    • 正如the docs 所说:“2.6 版中的新功能。”但是由于 OP 没有将 2.5 指定为要求,因此更改答案可能更容易,所以我会这样做。
    • 我可以发誓我提到过——我的错误。感谢您的回复!
    猜你喜欢
    • 2015-08-22
    • 2013-01-07
    • 2014-03-16
    • 2015-01-03
    • 1970-01-01
    • 2011-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多