1

我的输入文件可能是任意的,所以我将使用

f = open("in-file", 'rb')

块大小约为 4K 字节,因此我将使用

f.read(4096)

我想要做的是从文件中逐块读取块。此外,由于块实际上是一个 $2^15$-bit (4KB) 的序列,所以在读取一个块时,我需要将其转换为十进制值以便进一步计算。

例如,如果第一个块的形式为 0000...10,我想要的是另一个变量保持相应的十进制值,例如 x=2。

将字符串转换为位列表,反之亦然,我知道它的代码可以帮助我逐块读取块。

def tobits(s):
    result = []
    for c in s:
        bits = bin(ord(c))[2:]
        bits = '00000000'[len(bits):] + bits
        result.extend([int(b) for b in bits])
    return result

但是,我不知道如何将输出列表转换为十进制值。有人可以给我一些示例代码吗?谢谢你。

4

2 回答 2

1

通过引用http://code.activestate.com/recipes/510399-byte-to-hex-and-hex-to-byte-string-conversion/我发现下面的代码可能会运行得更快,因为它似乎没有涉及算术。

def ByteToHex( byteStr ):
    return ''.join( [ "%02X " % ord( x ) for x in byteStr ] ).strip()

因此,例如将 2 字节块读取为十进制数的任务可以通过以下代码完成:

in_file=open("in-file", "rb")
piece = in_file.read(2)
a=ByteToHex(piece)
a=int(a,16)
于 2013-01-17T19:21:36.560 回答
0

如果我理解正确的问题,您需要以下内容:

def bytes_to_long(bytes):
    result = 0l
    for c in bytes:
        result *= 256
        result += ord(c)
    return result

也就是说,这可能会有点慢,4kB 相当大long,并且会创建很多垃圾。您可能可以通过struct.unpack()每次迭代使用和处理多个字节来改进这一点,但是您必须处理正确的字节顺序和所有内容。在 Python 3 上,您可能也不需要 ,ord()因为它应该bytes从 IO 方法返回类型。

于 2013-01-17T17:22:38.387 回答