我遇到python unpack的问题。
self.value = struct.unpack("<I", f.read(4))[0]
对于值:0x17df320
(25031456
)返回错误
<class 'struct.error'>: unpack requires a string argument of length 4
但是对于值0x116fb00
(18283264
)是可以的。价值一个太大了?改为&#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的字符串参数
感谢您的帮助!
答案 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