Python解压缩错误

时间:2013-07-06 13:19:33

标签: python

我遇到python unpack的问题。

self.value = struct.unpack("<I", f.read(4))[0]

对于值:0x17df32025031456)返回错误

<class 'struct.error'>: unpack requires a string argument of length 4

但是对于值0x116fb0018283264)是可以的。价值一个太大了?改为&#34;我&#34;到&#34; L&#34;?


我仍有问题; /我的输出:http://pasteboard.s3.amazonaws.com/images/TjwtuTq.png代码:

def deserialize(self, f):
        buf = f.read(8)
        log.error("\n#####################\nCTxOut f: %s \nf8: %s\nf8l: %i\n#####################" % (f.getvalue(), buf, len(buf)))
        self.nValue = struct.unpack("<q", buf)[0]
        self.scriptPubKey = deser_string(f)

错误:

  

[失败实例:回溯::解包需要   一个长度为8的字符串参数

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

问题是 - 正如错误所说 - 您没有将长度为4的字符串传递给unpack

f.read(4)

不一定返回4个字节,它可能返回0到4个字节之间的任何内容,具体取决于缓冲区中可用的字节数或流是EOF的 - 我猜这是这种情况。< / p>

尝试检查您传递给函数的字节数:

buf = f.read(4)
if len(buf) == 4:
    self.value = struct.unpack("<I", buf)[0]
else:
    ...  # handle condition