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 回答