2

このコードが与えられた場合、aとbの値に違いがあると思いますか?

s = "\x4f\x00\x00\x50\xae\x08\x00\x00"
a = map(lambda x:x & 0xffff, struct.unpack('HHHH', s))
b = map(lambda x:x, struct.unpack('HHHH', s))

どちらの場合も、最終的に次のリストになります。

[79, 20480, 2222, 0]

ここで、各要素はintです。

私が尋ねる理由は、本質的にこのコードを含むpyipのtcp.pyのソースを見ていて「&0xffff」は無意味に見えるからです-何かが足りないのでしょうか?

4

1 に答える 1

4

「&0xffff」が違いを生むのは、16ビットを超える場合のみです。つまり、論理積を実行すると、下位16よりも重要なビットがすべてゼロに設定された値が生成されます。

于 2012-09-19T16:48:32.507 に答える