1

我对 python 解包有问题。

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

对于值:0x17df320( 25031456) 返回错误

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

但是对于值0x116fb00( 18283264) 是可以的。价值一太大?将“I”更改为“L”?


我对此仍有疑问;/我的输出: 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)

错误:

[失败实例:Traceback::unpack 需要一个长度为 8 的字符串参数

感谢帮助!

4

1 回答 1

3

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

f.read(4)

不一定返回 4 个字节,它可能返回 0 到 4 个字节之间的任何内容,具体取决于缓冲区中有多少字节可用,或者流是否处于 EOF - 我猜这里就是这种情况。

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

buf = f.read(4)
if len(buf) == 4:
    self.value = struct.unpack("<I", buf)[0]
else:
    ...  # handle condition
于 2013-07-06T13:25:59.077 回答