我的输入文件可能是任意的,因此我将使用
f = open("in-file", 'rb')
块大小约为4K字节,因此我将使用
f.read(4096)
我想要做的是从文件中读取块的块。 此外,由于块实际上是$ 2 ^ 15 $ -bit(4KB)序列,因此在读取块时,我需要将其转换为十进制值以进行进一步计算。
例如,如果第一个块的形式为0000 ... 10,那么我想要的是另一个变量保持相应的十进制值,例如,x = 2.
从Convert string to list of bits and viceversa我知道它的代码可以帮助我按块读取块。
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
但是,我不知道如何将输出列表转换为十进制值。有人可以给我一些示例代码吗?谢谢。
答案 0 :(得分: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)
答案 1 :(得分: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()
,因为它应该从IO方法返回bytes
类型。