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) は OK です。値 1 が大きすぎますか? 「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)

エラー:

[失敗例: トレースバック: : unpack には長さ 8 の文字列引数が必要です

手伝ってくれてありがとう!

4

1 に答える 1

3

問題は、エラーが示すように、長さ 4 の文字列を に渡していないことですunpack

f.read(4)

必ずしも 4 バイトを返すとは限りません。バッファ内で利用可能なバイト数やストリームが EOF にあるかどうかに応じて、0 から 4 バイトの間の値を返す場合があります。

関数に渡すバイト数を確認してください。

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