0

我有一个看起来像这样的列表:

['\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)

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

4

1 回答 1

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')
于 2013-07-12T20:20:58.640 回答